#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""verif_seri.py — audit jadwal seri Properti & Manufaktur di Threads/FB/LinkedIn StudioSoft.

Membaca ULANG dari API (bukan dari state lokal): status, jam WIB, panjang caption, link,
ajakan diskusi, hashtag lowercase, replies (Threads=1, FB/LinkedIn=0), CJK.
"""
import re
from datetime import datetime, timedelta, timezone

from repliz_client import get_client

WIB = timezone(timedelta(hours=7))
AKUN = {
    "6a335b9ec5ff4ce3a3225c2a": ("Threads SS", 500, 1),
    "6a334952c5ff4ce3a3225941": ("Facebook SS", 3000, 0),
    "6a334c49c5ff4ce3a32259c9": ("LinkedIn SS", 3000, 0),
}
CTA = re.compile(r"komentar|diskusi|pendapat|share|pengalaman|menurut", re.I)

c = get_client()
rows = []
page = 1
while True:
    r = c.get_schedules(page=page, limit=100)
    docs = r.get("docs") or r.get("data") or []
    if not docs:
        break
    for d in docs:
        if d.get("accountId") in AKUN and (d.get("topic") or "").startswith("Seri "):
            rows.append(d)
    if len(docs) < 100:
        break
    page += 1

print(f"total jadwal seri ditemukan: {len(rows)}\n")
masalah = []
per_akun = {}
for d in sorted(rows, key=lambda x: x.get("scheduleAt") or ""):
    nama, maks, nreplies = AKUN[d["accountId"]]
    desc = d.get("description") or ""
    rep = d.get("replies") or []
    tgl = datetime.strptime(d["scheduleAt"], "%Y-%m-%dT%H:%M:%S.%fZ").replace(tzinfo=timezone.utc).astimezone(WIB)
    err = []
    if d.get("status") != "pending":
        err.append(f"status={d.get('status')}")
    if len(desc) > maks:
        err.append(f"caption {len(desc)}>{maks}")
    if "studiosoft.id/digital-marketing-bisnis-" not in desc:
        err.append("link pilar hilang")
    if not CTA.search(desc[-200:]):
        err.append("tanpa ajakan komentar")
    if "@" in desc:
        err.append("ada mention")
    bad = [t for t in re.findall(r"#(\w+)", desc) if t != t.lower()]
    if bad:
        err.append(f"hashtag kapital {bad}")
    cjk = [ch for ch in desc if "\u3000" <= ch <= "\u9fff" or "\uac00" <= ch <= "\ud7af"]
    if cjk:
        err.append(f"CJK {cjk[:3]}")
    if len(rep) != nreplies:
        err.append(f"replies={len(rep)} (harus {nreplies})")
    per_akun.setdefault(nama, []).append((tgl, d.get("title"), len(desc), err))
    if err:
        masalah.append((nama, tgl, d.get("title"), err))

for nama, items in per_akun.items():
    print(f"== {nama}: {len(items)} jadwal, rentang {items[0][0].strftime('%d %b %H:%M')} – "
          f"{items[-1][0].strftime('%d %b %H:%M')} WIB")
    jam = sorted({i[0].strftime('%H:%M') for i in items})
    print(f"   jam terpakai: {jam} | caption {min(i[2] for i in items)}–{max(i[2] for i in items)} char")

print(f"\nMASALAH: {len(masalah)}")
for m in masalah:
    print("  ⚠️", m[0], m[1].strftime("%d %b %H:%M"), m[2][:50], m[3])

print("\ncontoh 3 caption:")
for d in sorted(rows, key=lambda x: x.get("scheduleAt") or "")[:1] + rows[19:20] + rows[-1:]:
    print("\n---", AKUN[d["accountId"]][0], datetime.strptime(d["scheduleAt"], "%Y-%m-%dT%H:%M:%S.%fZ")
          .replace(tzinfo=timezone.utc).astimezone(WIB).strftime("%d %b %H:%M WIB"), "|", d.get("title"))
    print((d.get("description") or "")[:400])
