#!/usr/bin/env python3
"""verify_hc55.py — verifikasi jadwal hc55 dari API (album Threads + 2 replies + LinkedIn + FB text)."""
import re
import sys
import time

sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import ReplizClient, ACC

ALBUM = "6ac1519d07008e0e91ab331d"
LIID = "6ac1519e1733078385dea1a0"
FBID = "6ac1519e07008e0e91ab3342"
EXPECT_MEDIA = ["ss_hc55_seors_%02d_%s.jpg" % (i, n) for i, n in
                [(1, "cover"), (2, "ketat"), (3, "pencarian"), (4, "struktur"), (5, "cta")]]
c = ReplizClient()


def norm_replies(r):
    out = []
    for x in (r or []):
        if isinstance(x, dict):
            nums = sorted([k for k in x.keys() if str(k).isdigit()], key=lambda k: int(k))
            if nums:
                out.append("".join(str(x[k]) for k in nums))
        else:
            out.append(str(x))
    return out


def get_retry(ep, tries=6):
    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 fetch(sid):
    d = get_retry("/public/schedule/%s" % sid)
    return d.get("doc") or d.get("data") or d


print("=== 1) ALBUM THREADS", ALBUM)
a = fetch(ALBUM)
print("  status=%s at=%s type=%s account=%s" % (a.get("status"), a.get("scheduleAt"), a.get("type"),
                                                (a.get("account") or {}).get("name")))
medias = a.get("medias") or []
got = [m.get("url", "").split("/")[-1] for m in medias]
print("  medias=%d" % len(medias))
for i, (exp, g) in enumerate(zip(EXPECT_MEDIA, got)):
    print("   %d %s %s" % (i + 1, "\u2705" if exp == g else "\u274c", g))
print("  urutan sesuai:", got == EXPECT_MEDIA)
desc = a.get("description") or ""
print("  caption=%d char | judul=%s" % (len(desc), (a.get("title") or "")[:70]))
print("  link artikel ada:", "seo-rumah-sakit" in desc)
print("  mention:", re.findall(r"@\w+", desc))
print("  hashtag KAPITAL:", [t for t in re.findall(r"#(\w+)", desc) if t != t.lower()])
print("  CJK:", bool(re.search(r"[\u3000-\u9fff\uff00-\uffef]", desc)))
print("  CTA ekor (STRICT):", bool(re.search(r"komentar|diskusi|pendapat|tulis di|share|pengalaman|menurut anda|setuju", desc[-160:], re.I)))

print("\n=== 2) LinkedIn %s" % LIID)
li = fetch(LIID)
print("  status=%s at=%s type=%s medias=%d replies=%d" % (li.get("status"), li.get("scheduleAt"),
                                                          li.get("type"), len(li.get("medias") or []),
                                                          len(li.get("replies") or [])))
ld = li.get("description") or ""
print("  caption=%d char | link ada: %s | CJK: %s | mention: %s | hashtag KAPITAL: %s" % (
    len(ld), "seo-rumah-sakit" in ld, bool(re.search(r"[\u3000-\u9fff\uff00-\uffef]", ld)),
    re.findall(r"@\w+", ld), [t for t in re.findall(r"#(\w+)", ld) if t != t.lower()]))

print("\n=== 3) Facebook %s" % FBID)
fb = fetch(FBID)
print("  status=%s at=%s type=%s medias=%d replies=%d" % (fb.get("status"), fb.get("scheduleAt"),
                                                          fb.get("type"), len(fb.get("medias") or []),
                                                          len(fb.get("replies") or [])))
fd = fb.get("description") or ""
print("  caption=%d char | link ada: %s | CJK: %s | mention: %s" % (
    len(fd), "jasa-digital-marketing-klinik" in fd, bool(re.search(r"[\u3000-\u9fff\uff00-\uffef]", fd)),
    re.findall(r"@\w+", fd)))

print("\n=== 4) ANAK/REPLY di sekitar 2026-10-05T02:0x (Threads SS)")
docs, page = [], 1
while True:
    d = get_retry("/public/schedule?page=%d&limit=100" % page)
    docs.extend(d.get("docs", []))
    if page >= (d.get("totalPages") or 1):
        break
    page += 1
kids = [x for x in docs if x.get("accountId") == ACC.STUDIOSOFT_THREADS
        and (x.get("scheduleAt") or "").startswith("2026-10-05T02:0")]
kids.sort(key=lambda x: x.get("scheduleAt"))
for k in kids:
    rr = norm_replies(k.get("replies"))
    print("  %s %s type=%s status=%s len=%d replies=%s" % (
        k.get("scheduleAt")[11:19], k.get("_id"), k.get("type"), k.get("status"),
        len(k.get("description") or ""), rr))
print("  anak menempel ke album:", sum(1 for k in kids if ALBUM in norm_replies(k.get("replies"))))

print("\n=== 5) hanya 1 album hc55 (scan semua status)")
cnt = 0
for x in docs:
    for m in (x.get("medias") or []):
        if "ss_hc55_seors_" in (m.get("url") or ""):
            cnt += 1
            break
print("  jadwal dgn media hc55:", cnt)
