#!/usr/bin/env python3
"""verify_hc56.py — verifikasi jadwal hc56 dari API (album Threads + 2 replies + 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 = "6ac2a2fa17330783852e760d"
R1 = "6ac2a2fa07008e0e91e553ea"
R2 = "6ac2a2fb17330783852e762b"
FBID = "6ac2a2fb07008e0e91e553fa"
EXPECT_MEDIA = ["ss_hc56_indikatorrs_%02d_%s.jpg" % (i, n) for i, n in
                [(1, "cover"), (2, "bukan"), (3, "enam"), (4, "baca"), (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:", "digital-marketing-rumah-sakit-indikator" 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) REPLY anak (%s, %s)" % (R1, R2))
for sid in (R1, R2):
    r = fetch(sid)
    rr = norm_replies(r.get("replies"))
    print("  %s status=%s at=%s type=%s medias=%d replies=%s menempel=%s" % (
        sid, r.get("status"), r.get("scheduleAt"), r.get("type"), len(r.get("medias") or []), rr, ALBUM in rr))
    print("    caption=%d char | link ada: %s | CJK: %s | mention: %s" % (
        len(r.get("description") or ""), "digital-marketing-rumah-sakit-indikator" in (r.get("description") or ""),
        bool(re.search(r"[\u3000-\u9fff\uff00-\uffef]", r.get("description") or "")),
        re.findall(r"@\w+", r.get("description") or "")))

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 | hashtag KAPITAL: %s" % (
    len(fd), "7-aplikasi-mental-health-anak" in fd, bool(re.search(r"[\u3000-\u9fff\uff00-\uffef]", fd)),
    re.findall(r"@\w+", fd), [t for t in re.findall(r"#(\w+)", fd) if t != t.lower()]))
print("  CTA ekor (STRICT):", bool(re.search(r"komentar|diskusi|pendapat|tulis di|share|pengalaman|menurut anda|setuju", fd[-160:], re.I)))

print("\n=== 4) ANAK/REPLY di sekitar 2026-10-06T02: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-06T02: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 hc56 (scan semua status)")
cnt = 0
for x in docs:
    for m in (x.get("medias") or []):
        if "ss_hc56_indikatorrs_" in (m.get("url") or ""):
            cnt += 1
            break
print("  jadwal dgn media hc56:", cnt)
