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

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

ALBUM = "6abc0bb51733078385afc335"
FBID = "6abc0bb61246a403ed765581"
EXPECT_MEDIA = [("ss_hc51_mentalanak_%02d_%s.jpg" % (i, n)) for i, n in
                [(1, "cover"), (2, "kenapa"), (3, "empat"), (4, "tiga"), (5, "cta")]]
c = ReplizClient()


def norm_replies(r):
    """Normalisasi replies: elemen bisa dict ObjectId per karakter (lihat verify_hc39)."""
    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 []
print("  medias=%d" % len(medias))
got = [m.get("url", "").split("/")[-1] for m in 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)
print("  caption=%d char | judul=%s" % (len(a.get("description") or ""), (a.get("title") or "")[:60]))
print("  link artikel ada:", "7-aplikasi-mental-health-anak" in (a.get("description") or ""))
print("  mention:", re.findall(r"@\w+", (a.get("description") or "")))
print("  hashtag KAPITAL:", [t for t in re.findall(r"#(\w+)", (a.get("description") or "")) if t != t.lower()])

print("\n=== 2) ANAK/REPLY di sekitar 2026-10-01T02: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-01T02: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=== 3) FACEBOOK", FBID)
f = fetch(FBID)
print("  status=%s at=%s type=%s account=%s medias=%d replies=%s" % (
    f.get("status"), f.get("scheduleAt"), f.get("type"), (f.get("account") or {}).get("name"),
    len(f.get("medias") or []), norm_replies(f.get("replies"))))
print("  judul=%s" % (f.get("title") or "")[:70])
print("  link FB:", "7-strategi-digital-marketing-rumah-sakit" in (f.get("description") or ""))
print("  caption=%d char" % len(f.get("description") or ""))
print("  mention:", re.findall(r"@\w+", (f.get("description") or "")))
print("  hashtag KAPITAL:", [t for t in re.findall(r"#(\w+)", (f.get("description") or "")) if t != t.lower()])
