#!/usr/bin/env python3
"""hc53_cek_aturan.py — cek akhir: jumlah jadwal ber-media ss_hc53_jasars_* di akun SS (semua status)
+ validasi aturan caption (CJK, hashtag kapital, mention, CTA ketat) dari API."""
import re
import sys
import time

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

c = ReplizClient()
STRICT = re.compile(r"komentar|diskusi|pendapat|tulis di|share|pengalaman|menurut anda|setuju", re.I)


def get_retry(ep, tries=6):
    last = None
    for i in range(tries):
        try:
            return c.get(ep)
        except Exception as e:
            last = e
            time.sleep(3 + 3 * i)
    raise last


docs, page = [], 1
while True:
    d = get_retry("/public/schedule?page=%d&limit=100" % page)
    docs.extend(d.get("docs", []))
    if page >= (d.get("totalPages") or 1):
        break
    page += 1
print("total docs:", len(docs))

hit = []
for s in docs:
    if s.get("accountId") not in (ACC.STUDIOSOFT_THREADS, ACC.STUDIOSOFT_LINKEDIN, ACC.STUDIOSOFT_FB):
        continue
    for m in (s.get("medias") or []):
        b = (m.get("url") or "").split("/")[-1].lower()
        if b.startswith("ss_hc53_jasars_"):
            hit.append(((s.get("scheduleAt") or "")[:16], s.get("type"), s.get("status"), b))
            break
print("jadwal ber-media ss_hc53_jasars_*:", len(hit))
for h in sorted(hit):
    print("  ", h)

print("\naturan caption (3 jadwal hc53):")
for sid, label in (("6abeae9107008e0e913db167", "Threads"),
                   ("6abeae9107008e0e913db16f", "LinkedIn"),
                   ("6abeae911733078385453f37", "Facebook")):
    d = get_retry("/public/schedule/%s" % sid)
    doc = d.get("doc") or d.get("data") or d
    t = doc.get("description") or ""
    issues = []
    if re.search(r"[\u3000-\u9fff\uff00-\uffef]", t):
        issues.append("CJK")
    if [x for x in re.findall(r"#(\w+)", t) if x != x.lower()]:
        issues.append("hashtag kapital")
    if re.findall(r"@\w+", t):
        issues.append("mention")
    if "..." in t:
        issues.append("elipsis")
    if len(t) > 2200:
        issues.append(">2200")
    if not STRICT.search(t[-160:]):
        issues.append("tanpa CTA ketat")
    if label == "Threads" and len(t) > 500:
        issues.append(">500")
    print("  %-9s %d char | repos=%s | issues=%s" % (label, len(t),
                                                      (doc.get("replies") or []), issues or "NONE"))
