#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""verif_fb_teks.py — audit post teks baru di Facebook StudioSoft (topic 'Teks FB StudioSoft')."""
import re
from datetime import datetime, timedelta, timezone

from repliz_client import get_client

WIB = timezone(timedelta(hours=7))
ACC = "6a334952c5ff4ce3a3225941"
CTA = re.compile(r"komentar|diskusi|pendapat|bagikan|cerita|tulis di|pengalaman", 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") == ACC and (d.get("topic") or "").startswith("Teks FB"):
            rows.append(d)
    if len(docs) < 100:
        break
    page += 1

rows.sort(key=lambda x: x["scheduleAt"])
print(f"post teks FB StudioSoft: {len(rows)}")
hari = {}
masalah = []
for d in rows:
    t = datetime.strptime(d["scheduleAt"], "%Y-%m-%dT%H:%M:%S.%fZ").replace(
        tzinfo=timezone.utc).astimezone(WIB)
    teks = d.get("description") or ""
    hari.setdefault(t.strftime("%d %b"), []).append(t.strftime("%H:%M"))
    err = []
    if d.get("status") != "pending":
        err.append(f"status={d.get('status')}")
    if len(d.get("medias") or []):
        err.append("ada media (harus teks murni)")
    if len(d.get("replies") or []):
        err.append("replies tidak kosong (FB wajib [])")
    if not (250 <= len(teks) <= 2000):
        err.append(f"panjang {len(teks)}")
    if not CTA.search(teks[-220:]):
        err.append("tanpa ajakan komentar")
    if "@" in teks:
        err.append("ada mention")
    bad = [x for x in re.findall(r"#(\w+)", teks) if x != x.lower()]
    if bad:
        err.append(f"hashtag kapital {bad}")
    cjk = [ch for ch in teks if "\u3000" <= ch <= "\u9fff" or "\uac00" <= ch <= "\ud7af"]
    if cjk:
        err.append(f"CJK {cjk[:3]}")
    if err:
        masalah.append((t, d.get("title"), err))

print("sebaran per hari:", ", ".join(f"{k} {'/'.join(v)}" for k, v in list(hari.items())))
print(f"rata-rata panjang: {sum(len(d.get('description') or '') for d in rows)//max(len(rows),1)} char")
print(f"MASALAH: {len(masalah)}")
for m in masalah:
    print("  ⚠️", m[0].strftime("%d %b %H:%M"), (m[1] or "")[:45], m[2])
