#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Audit kecocokan isi carousel @ukyhandoko: slide <-> caption <-> judul & topic jadwal.

Pakai: python3 audit_konten_carousel_uky.py
"""
import re, sys, json, glob, urllib.parse, urllib.request

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

UKY = "6a334e89c5ff4ce3a3225a48"
# poin yang tertulis di slide (dari deck generator) vs yang disebut di caption
SERI = {
    "a": {"judul_slide": "8 KEBIASAAN BISNIS KECIL TUMBUH",
          "poin": ["jualan pakai cerita", "catat angkanya", "tampil teratur", "pilih satu kanal",
                   "minta umpan balik", "balas cepat", "hitung harga jangan nebak", "rawat pelanggan lama"],
          "cap": "caption_uky_car_a.txt"},
    "b": {"judul_slide": "FOTO JUALAN DIPERCAYA KARENA 8 HAL INI",
          "poin": ["cahaya alami", "latar bersih", "jangan zoom digital", "tunjukkan ukurannya",
                   "foto prosesnya", "munculkan orangnya", "konsisten warna", "jangan over-edit"],
          "cap": "caption_uky_car_b.txt"},
    "c": {"judul_slide": "8 PEKERJAAN YANG BISA DIBANTU AI",
          "poin": ["draft caption", "riset kata kunci", "ringkas laporan", "susun jadwal konten",
                   "jawab pertanyaan berulang", "cek ejaan dan nada", "olah data sederhana", "ide dan variasi"],
          "cap": "caption_uky_car_c.txt"},
}


def normal(s):
    return re.sub(r"[^a-z0-9 ]", "", (s or "").lower())


docs, page = [], 1
while True:
    q = urllib.parse.urlencode({"page": page, "limit": 100})
    req = urllib.request.Request(f"{BASE}/public/schedule?{q}", headers=HEADERS)
    with urllib.request.urlopen(req, timeout=60) as r:
        d = json.loads(r.read().decode())
    b = d.get("docs") or []
    docs += b
    if not b or page * 100 >= (d.get("totalDocs") or 0):
        break
    page += 1

milik = [x for x in docs if (x.get("account") or {}).get("_id") == UKY and x.get("status") == "pending"]
print(f"jadwal pending uky: {len(milik)}\n")

for seri, meta in SERI.items():
    cap = normal(open(meta["cap"]).read())
    jadwal = [x for x in milik
              if any((m.get("url") or "").split("/")[-1].startswith(f"uky_car_{seri}_01")
                     for m in (x.get("medias") or []))]
    j = jadwal[0] if jadwal else None
    print(f"=== SERI {seri.upper()} ===")
    if not j:
        print("  ❌ jadwalnya tidak ditemukan di Repliz")
        continue
    med = len(j.get("medias") or [])
    print(f"  jadwal: {j.get('scheduleAt')} | {med} slide | topic={j.get('topic')!r} | title={(j.get('title') or '')[:50]!r}")
    # 1. caption menyebut semua poin slide?
    poin_n = [normal(p) for p in meta["poin"]]
    kurang = [p for p, pn in zip(meta["poin"], poin_n) if pn not in cap]
    print(f"  caption menyebut {len(meta['poin']) - len(kurang)}/{len(meta['poin'])} poin slide"
          + (f" | kurang: {kurang}" if kurang else " ✅"))
    # 2. jumlah slide sesuai janji di judul/cover?
    angka = re.search(r"\b(\d+)\b", meta["judul_slide"])
    n = int(angka.group(1)) if angka else None
    isi = med - 2                                   # cover + penutup
    print(f"  cover menjanjikan {n} poin, slide isi = {isi} {'✅' if n == isi else '❌ TIDAK COCOK'}")
    # 3. ada kata yang bertabrakan (mis. caption bilang 5 padahal cover 8)
    for kandidat in re.findall(r"\b(\d+)\b", open(meta["cap"]).read()):
        if n and kandidat not in (str(n),):
            print(f"  ⚠️ caption memuat angka lain: {kandidat}")
    # 4. caption punya link? (aturan lama uky: materinya dari website sendiri)
    link = re.findall(r"https?://\S+", j.get("description") or "")
    print(f"  link di caption: {link if link else 'TIDAK ADA'}")
    # 5. slide di media masih ada semua?
    hilang = [f"uky_car_{seri}_{i:02d}.jpg" for i in range(1, med + 1)
              if not glob.glob(f"openclaw-img/uky_car_{seri}_{i:02d}.jpg")]
    print(f"  file media: {med} slide, hilang: {hilang if hilang else '-'}")
    print()
