#!/usr/bin/env python3
"""verify_hc42.py — verifikasi final hc42: album Threads + replies + LI + FB (fetch ulang per-ID)."""
import json, os, sys, time
sys.path.insert(0, '/home/mantapman/.hermes/profiles/atun/workspace')
from repliz_client import ReplizClient, ACC

c = ReplizClient()
ALBUM = (sys.argv[1] if len(sys.argv) > 1 else
         (open('/tmp/hc42_threads_album_id.txt').read().strip()
          if os.path.exists('/tmp/hc42_threads_album_id.txt') else '6ab1062202078a414acbaa45'))


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 all_docs():
    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
    return docs


docs = all_docs()
print("total docs:", len(docs))

print("\n=== 1) ALBUM Threads %s ===" % ALBUM)
d = get_retry("/public/schedule/%s" % ALBUM)
doc = d.get("doc") or d.get("data") or d
print("  account=%s status=%s at=%s type=%s medias=%d" % (doc.get("accountId"), doc.get("status"),
      doc.get("scheduleAt"), doc.get("type"), len(doc.get("medias") or [])))
print("  title:", (doc.get("title") or "")[:90])
print("  desc:", (doc.get("description") or "")[:200].replace("\n", " | "))
print("  desc len:", len(doc.get("description") or ""))
for m in (doc.get("medias") or []):
    print("   -", m.get("url"))

print("\n=== 2) REPLIES anak dari album (normalisasi ObjectId) ===")
for s in docs:
    r = s.get("replies") or []
    norm = []
    for x in r:
        if isinstance(x, dict):
            try:
                norm.append("".join(v for k, v in sorted(x.items(), key=lambda kv: int(kv[0]))))
            except Exception:
                norm.append(str(x))
        else:
            norm.append(str(x))
    if ALBUM in norm:
        print("  child %s | %s | %s | %s" % (s.get("_id") or s.get("id"), (s.get("scheduleAt") or "")[:19],
              s.get("status"), (s.get("description") or "")[:70].replace("\n", " | ")))

print("\n=== 3) semua post Threads SS tgl 22 Sep 2026 (cek duplikat) ===")
for s in sorted([x for x in docs if x.get("accountId") == ACC.STUDIOSOFT_THREADS
                 and (x.get("scheduleAt") or "").startswith("2026-09-22")],
                key=lambda x: x.get("scheduleAt") or ""):
    print("  %s | %-8s | %-6s | medias=%d | %s" % ((s.get("scheduleAt") or "")[:19], s.get("status"),
          s.get("type"), len(s.get("medias") or []), (s.get("title") or s.get("description") or "")[:55].replace("\n", " ")))

print("\n=== 4) LinkedIn SS (iklan FB/IG RS) ===")
for s in docs:
    if s.get("accountId") != ACC.STUDIOSOFT_LINKEDIN:
        continue
    if "iklan-facebook-rumah-sakit" in ((s.get("description") or "") + (s.get("title") or "")):
        print("  %s | %s | %s | medias=%d replies=%d | %s" % (s.get("_id") or s.get("id"),
              (s.get("scheduleAt") or "")[:19], s.get("status"), len(s.get("medias") or []),
              len(s.get("replies") or []), (s.get("title") or "")[:60]))
        print("    desc len:", len(s.get("description") or ""), "| tail:", (s.get("description") or "")[-90:].replace("\n", " "))

print("\n=== 5) Facebook SS (google-business-profile-klinik) ===")
for s in docs:
    if s.get("accountId") != ACC.STUDIOSOFT_FB:
        continue
    if "google-business-profile-klinik" in ((s.get("description") or "") + (s.get("title") or "")):
        print("  %s | %s | %s | medias=%d replies=%d | %s" % (s.get("_id") or s.get("id"),
              (s.get("scheduleAt") or "")[:19], s.get("status"), len(s.get("medias") or []),
              len(s.get("replies") or []), (s.get("title") or "")[:60]))
        print("    desc len:", len(s.get("description") or ""), "| tail:", (s.get("description") or "")[-90:].replace("\n", " "))
