#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""hc68_verify.py — verifikasi akhir jadwal hc68 (Threads album + 2 replies, LI, FB)."""
import json, os, re, sys

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
sys.path.insert(0, WS)
import repliz_openssl_transport
repliz_openssl_transport.install(verbose=False)
from repliz_client import ReplizClient, ACC

c = ReplizClient()
IDS = {
    "threads": "6ad2751883496b501ffaf13c",
    "reply1": "6ad2751883496b501ffaf145",
    "reply2": "6ad27519601f5a03618130d8",
    "linkedin": "6ad2751983496b501ffaf164",
    "facebook": "6ad27519601f5a03618130f1",
}
EXPECT_ACC = {
    "threads": ACC.STUDIOSOFT_THREADS,
    "reply1": ACC.STUDIOSOFT_THREADS,
    "reply2": ACC.STUDIOSOFT_THREADS,
    "linkedin": ACC.STUDIOSOFT_LINKEDIN,
    "facebook": ACC.STUDIOSOFT_FB,
}
MEDIA = ["ss_hc68_websigagal_01_cover", "ss_hc68_websigagal_02_keluhan",
         "ss_hc68_websigagal_03_sebab", "ss_hc68_websigagal_04_periksa",
         "ss_hc68_websigagal_05_cta"]
problems = []
doc = {}


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


for name, sid in IDS.items():
    d = c.get("/public/schedule/%s" % sid)
    doc[name] = d.get("doc") or d.get("data") or d
    x = doc[name]
    st = (x.get("status") or "").lower()
    print("%-9s %s | acc=%s status=%s at=%s type=%s medias=%d replies=%s" % (
        name, sid, x.get("accountId"), st, x.get("scheduleAt"), x.get("type"),
        len(x.get("medias") or []), norm_replies(x.get("replies"))))
    if st != "pending":
        problems.append("%s status bukan pending: %s" % (name, st))
    if x.get("accountId") != EXPECT_ACC[name]:
        problems.append("%s akun salah: %s" % (name, x.get("accountId")))

# caption checks
desc = doc["threads"].get("description") or ""
print("\n=== CTA/CJK Threads ===")
print("char:", len(desc))
if not re.search(r"komentar|diskusi|pendapat|menurut anda|setuju", desc[-160:], re.I):
    problems.append("Threads: tidak ada pancingan diskusi di ekor")
if re.search(r"[\u3000-\u9fff\uff00-\uffef]", desc):
    problems.append("Threads: ada karakter CJK")
if "..." in desc:
    problems.append("Threads: ada elipsis")
if re.findall(r"@\w+", desc):
    problems.append("Threads: ada mention")
if len(desc) > 500:
    problems.append("Threads: %d char > 500" % len(desc))
if "website-rumah-sakit-gagal-pasien" not in desc:
    problems.append("Threads: link artikel tidak ada")

# media order
urls = [os.path.basename((m.get("url") or "").split("?")[0]) for m in (doc["threads"].get("medias") or [])]
print("\n=== urutan media ===")
print(urls)
exp = [m + ".jpg" for m in MEDIA]
if urls != exp:
    problems.append("urutan media tidak cocok: %s" % urls)

# replies menempel ke album
alb = IDS["threads"]
for r in ("reply1", "reply2"):
    rp = norm_replies(doc[r].get("replies"))
    print("%s replies -> %s" % (r, rp))
    if alb not in rp:
        problems.append("%s tidak menempel ke album" % r)

# LI & FB: text saja, tanpa media, replies kosong
for name in ("linkedin", "facebook"):
    x = doc[name]
    if (x.get("medias") or []):
        problems.append("%s ada media (harus TEXT saja)" % name)
    if norm_replies(x.get("replies")):
        problems.append("%s ada replies (harus [])" % name)
    sz = len(x.get("description") or "")
    print("%s caption %d char, medias=%d" % (name, sz, len(x.get("medias") or [])))
    if re.search(r"[\u3000-\u9fff\uff00-\uffef]", x.get("description") or ""):
        problems.append("%s: ada karakter CJK" % name)

# duplikat: hanya 1 album/jadwal dgn media ss_hc68_*
print("\n=== dup check ===")
cnt = 0
page = 1
while True:
    d = c.get("/public/schedule?page=%d&limit=100" % page)
    for s in d.get("docs", []):
        for m in (s.get("medias") or []):
            b = os.path.basename((m.get("url") or "").split("?")[0])
            if b.startswith("ss_hc68_websigagal"):
                cnt += 1
                print("  ", s.get("_id"), s.get("accountId"), (s.get("scheduleAt") or "")[:16],
                      s.get("status"), s.get("type"), b)
                break
    if page >= (d.get("totalPages") or 1):
        break
    page += 1
print("total jadwal bermedia ss_hc68_*:", cnt)
if cnt != 1:
    problems.append("jumlah jadwal bermedia ss_hc68_* = %d (harus 1)" % cnt)

print("\n" + "=" * 55)
if problems:
    print("MASALAH (%d):" % len(problems))
    for p in problems:
        print("  -", p)
    sys.exit(1)
print("0 MASALAH \u2014 semua jadwal hc68 sehat.")
