#!/usr/bin/env python3
"""hc61 verify: baca ULANG tiap jadwal dari API + cek aturan (media urut, replies, link, hashtag, CJK)."""
import json
import os
import re
import sys

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

IDS = {
    "threads": "6ac93ab1411e0d496439ccd4",
    "reply1": "6ac93ab1297a87625461b681",
    "reply2": "6ac93ab1411e0d496439cd0b",
    "linkedin": "6ac93ab2297a87625461b6ae",
    "facebook": "6ac93ab2411e0d496439cd4b",
}
ALBUM = IDS["threads"]
EXPECT_ACC = {
    "threads": ACC.STUDIOSOFT_THREADS,
    "reply1": ACC.STUDIOSOFT_THREADS,
    "reply2": ACC.STUDIOSOFT_THREADS,
    "linkedin": ACC.STUDIOSOFT_LINKEDIN,
    "facebook": ACC.STUDIOSOFT_FB,
}
EXPECT_MEDIA = [
    "ss_hc61_seoklinikcan_01_cover.jpg", "ss_hc61_seoklinikcan_02_halpertama.jpg",
    "ss_hc61_seoklinikcan_03_lima.jpg", "ss_hc61_seoklinikcan_04_bukti.jpg",
    "ss_hc61_seoklinikcan_05_cta.jpg",
]
c = ReplizClient()
CJK = re.compile(r"[\u3000-\u9fff\uff00-\uffef]")
bad = 0


def norm_replies(reps):
    """List endpoint bisa balas ObjectId per karakter -> normalisasi ke string."""
    out = []
    for r in reps or []:
        if isinstance(r, dict):
            keys = [k for k in r.keys() if k.isdigit()]
            if keys:
                out.append("".join(r[k] for k in sorted(keys, key=int)))
                continue
            if r.get("_id"):
                out.append(str(r["_id"]))
        else:
            out.append(str(r))
    return out


for name, sid in IDS.items():
    d = c.get("/public/schedule/%s" % sid)
    doc = d.get("doc") or d.get("data") or d
    meds = doc.get("medias") or []
    reps = norm_replies(doc.get("replies") or [])
    txt = doc.get("description") or ""
    print("=" * 70)
    print("%-9s status=%-8s at=%s type=%-6s accOK=%s media=%d replies=%d len=%d topic=%r" % (
        name, doc.get("status"), doc.get("scheduleAt"), doc.get("type"),
        doc.get("accountId") == EXPECT_ACC[name], len(meds), len(reps), len(txt),
        doc.get("topic")))
    print("   title:", (doc.get("title") or "")[:70])
    for m in meds:
        print("   media:", (m.get("url") or "").split("/")[-1])
    if CJK.search(txt):
        print("   \u274c ADA CJK"); bad += 1
    caps = [t for t in re.findall(r"#(\w+)", txt) if t != t.lower()]
    if caps:
        print("   \u274c hashtag kapital:", caps); bad += 1
    if re.search(r"@\w+", txt):
        print("   \u274c ada mention @"); bad += 1
    has_link = "https://studiosoft.id/" in txt
    cta = re.search(r"komentar|diskusi|setuju|menurut anda", txt[-200:], re.I)
    print("   link=%s cta=%s" % (has_link, bool(cta)))
    if name in ("linkedin", "facebook"):
        if meds:
            print("   \u274c %s TIDAK boleh ada media" % name); bad += 1
        if reps:
            print("   \u274c %s replies harus []" % name); bad += 1
        if not has_link:
            print("   \u274c %s tanpa link" % name); bad += 1
    if name == "threads":
        if len(txt) > 500:
            print("   \u274c threads > 500"); bad += 1
        if len(meds) != 5:
            print("   \u274c threads harus 5 media"); bad += 1
        got = [(m.get("url") or "").split("?")[0].rsplit("/", 1)[-1] for m in meds]
        if got != EXPECT_MEDIA:
            print("   \u274c urutan media salah:", got); bad += 1
        if not has_link:
            print("   \u274c threads tanpa link"); bad += 1
    if name.startswith("reply"):
        if ALBUM not in reps:
            print("   \u274c reply tidak menempel ke album (replies=%s)" % reps); bad += 1
        if len(txt) > 500:
            print("   \u274c reply > 500"); bad += 1
print("=" * 70)
print("MASALAH:", bad)
print("state:", open("/home/mantapman/.hermes/profiles/atun/workspace/studiosoft_healthcare_state.json").read())
