#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Verifikasi independen 18 jadwal carousel TS Law v2 SETELAH pemasangan (baca ulang dari API)."""
import re
import sys
from datetime import datetime, timezone, timedelta

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

WIB = timezone(timedelta(hours=7))
TARGET = {
    "mitos10": (10, "Carousel 10 anggapan hukum yang sering bikin salah langkah"),
    "mitosproses": (7, "Carousel 7 anggapan soal proses hukum yang perlu diluruskan"),
    "mitoshak": (6, "Carousel 6 anggapan soal hak dan kewajiban sebelum bersepakat"),
    "mitoskerja": (5, "Carousel 5 anggapan soal kerja dan perusahaan sebelum tanda tangan"),
    "mitosbukti": (6, "Carousel 6 anggapan soal bukti dan hak di ruang sidang"),
    "mitostanah": (7, "Carousel 7 anggapan soal tanah dan rumah yang perlu dicek dulu"),
}
KATA_ANGKA = re.compile(
    r"\b(Kesepuluh|Sepuluh|sepuluh|Ketujuh|Tujuh|tujuh|Keenam|Enam|enam|Kelima|Lima|lima"
    r"|Kedelapan|Delapan|delapan)\b")
AKUN = {ACC.TSLAW_IG: "IG", ACC.TSLAW_FB: "FB", ACC.TSLAW_THREADS: "Threads"}
CJK = re.compile(r"[\u3000-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff\uff00-\uffef]")

c = ReplizClient()
rows, page = [], 1
while True:
    r = c.get(f"/public/schedule?page={page}&limit=100")
    d = r.get("docs", [])
    if not d:
        break
    rows += d
    if page >= r.get("totalPages", 1):
        break
    page += 1

print(f"total jadwal terbaca: {len(rows)}\n")
masalah = 0
for seri, (n, judul_ekor) in TARGET.items():
    slide = [f"tslaw_{seri}_{i:02d}.jpg" for i in range(1, n + 3)]
    grup = [d for d in rows if d.get("accountId") in AKUN
            and str(d.get("type", "")).lower() == "album"
            and (d.get("medias") or [{}])[0].get("url", "").endswith(f"tslaw_{seri}_01.jpg")]
    print(f"### {seri} — target {n} anggapan, {len(slide)} slide, jadwal ditemukan: {len(grup)}")
    for d in sorted(grup, key=lambda x: x.get("scheduleAt") or ""):
        ch = AKUN[d["accountId"]]
        med = [m.get("url", "").split("/")[-1] for m in (d.get("medias") or [])]
        desc = d.get("description") or ""
        dt = datetime.fromisoformat(d["scheduleAt"].replace("Z", "+00:00")).astimezone(WIB)
        err = []
        if d.get("status") != "pending":
            err.append(f"status={d.get('status')}")
        if med != slide:
            err.append("media tidak cocok")
        if judul_ekor not in (d.get("title") or ""):
            err.append("judul lama")
        if len(desc) > (500 if ch == "Threads" else 2200):
            err.append("caption kepanjangan")
        if not re.search(r"komentar", desc, re.I):
            err.append("tanpa CTA")
        if CJK.search(desc) or CJK.search(d.get("title") or ""):
            err.append("CJK")
        if any(t != t.lower() for t in re.findall(r"#(\w+)", desc)):
            err.append("hashtag besar")
        sisa_angka = KATA_ANGKA.findall(desc + " " + (d.get("title") or ""))
        if sisa_angka:
            err.append("kata angka: " + ",".join(sorted(set(sisa_angka))))
        if err:
            masalah += 1
        print(f"  [{'✅' if not err else '❌ ' + ', '.join(err)}] {ch:7} {dt:%d %b %H:%M} | "
              f"{len(med)} media | caption {len(desc)} | {d.get('status')} | {d.get('title')}")
    print()
print("TOTAL MASALAH:", masalah)
sys.exit(1 if masalah else 0)
