#!/usr/bin/env python3
"""Verifikasi independen hc49: baca ULANG dari API Repliz (jadwal + replies + media + urutan slide)."""
import re, sys, time
sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import ReplizClient, ACC

c = ReplizClient()
IDS = {
    "threads_album": "6ab968bcd5a7451390e75413",
    "linkedin": "6ab968bc9a8564a8eba6d021",
    "facebook": "6ab968bc9a8564a8eba6d033",
}
MEDIA_EXPECT = [
    "ss_hc49_seoklinikcan_01_cover.jpg",
    "ss_hc49_seoklinikcan_02_kenapa.jpg",
    "ss_hc49_seoklinikcan_03_fondasi.jpg",
    "ss_hc49_seoklinikcan_04_lokal.jpg",
    "ss_hc49_seoklinikcan_05_cta.jpg",
]


def get(ep, tries=5):
    last = None
    for i in range(tries):
        try:
            return c.get(ep)
        except Exception as e:
            last = e
            time.sleep(3 + 3 * i)
    raise last


def norm_oid(v):
    """Repliz kadang men-serialisasi ObjectId per karakter: {'0':'6','1':'a',...,'status':'pending'}."""
    if isinstance(v, str):
        return v
    if isinstance(v, dict):
        keys = [k for k in v.keys() if str(k).isdigit()]
        if keys:
            return "".join(str(v[k]) for k in sorted(keys, key=lambda x: int(x)))
    return str(v)


for name, sid in IDS.items():
    d = get("/public/schedule/%s" % sid)
    doc = d.get("doc") or d.get("data") or d
    print("=" * 90)
    print("%s (%s)" % (name, sid))
    print("  status     :", doc.get("status"))
    print("  accountId  :", doc.get("accountId"))
    print("  scheduleAt :", doc.get("scheduleAt"))
    print("  type       :", doc.get("type"))
    print("  title      :", (doc.get("title") or "")[:90])
    med = doc.get("medias") or []
    print("  medias(%d) :" % len(med))
    for m in med:
        print("      ", m.get("url"))
    rep = doc.get("replies") or []
    print("  replies(%d):" % len(rep), [norm_oid(r.get("_id") or r.get("scheduleId") or r) if isinstance(r, dict) else r for r in rep])
    desc = doc.get("description") or ""
    print("  desc %d char | ekor: %s" % (len(desc), desc[-120:].replace("\n", " / ")))

print("=" * 90)
print("Cek media album = urutan yang diminta:")
d = get("/public/schedule/6ab968bcd5a7451390e75413")
doc = d.get("doc") or d.get("data") or d
got = [(m.get("url") or "").split("/")[-1] for m in (doc.get("medias") or [])]
print("  cocok:", got == MEDIA_EXPECT)
for i, (a, b) in enumerate(zip(got, MEDIA_EXPECT), 1):
    print("   %d. %s %s" % (i, a, "OK" if a == b else "SALAH (harus %s)" % b))

print("=" * 90)
print("Cek reply anak album (dump jadwal Threads SS, scheduleAt 2026-09-29T02:0x):")
docs, page = [], 1
while True:
    dd = get("/public/schedule?page=%d&limit=100" % page)
    docs.extend(dd.get("docs", []))
    if page >= (dd.get("totalPages") or 1):
        break
    page += 1
ALBUM = "6ab968bcd5a7451390e75413"
for s in docs:
    if s.get("accountId") == ACC.STUDIOSOFT_THREADS and (s.get("scheduleAt") or "").startswith("2026-09-29T02:0"):
        par = [norm_oid(r) if isinstance(r, dict) else r for r in (s.get("replies") or [])]
        print("  %s %s type=%s medias=%d parent=%s -> %s" % (
            s.get("scheduleAt"), s.get("status"), s.get("type"), len(s.get("medias") or []),
            par, (s.get("description") or "")[:60].replace("\n", " / ")))
        if ALBUM in par:
            print("      ^ reply anak menempel ke album OK")
print("total docs:", len(docs))

print("=" * 90)
print("Cek CJK di semua jadwal baru:")
CJK = re.compile(r"[\u3000-\u9fff\uff00-\uffef]")
for name, sid in IDS.items():
    d = get("/public/schedule/%s" % sid)
    doc = d.get("doc") or d.get("data") or d
    txt = (doc.get("title") or "") + (doc.get("description") or "")
    print("  %s: %s" % (name, "ADA CJK!" if CJK.search(txt) else "bersih"))
