#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""tslaw_story_audit.py — audit akun TS Law (IG + FB): jadwal, jam yang dipakai, media yang sudah tayang.

Read-only. Keluarannya:
  • ringkasan per akun: total, per status, per tipe, per jam WIB (pending ke depan)
  • daftar media yang PERNAH TAYANG (status success) -> bakal jadi bahan story
  • apakah sudah ada jadwal type=story di akun itu
Dump semua jadwal ke /tmp/tslaw_sched.json (biar bisa dipakai script lain tanpa fetch ulang).
"""
import datetime
import json
import re
import sys
import time
from collections import Counter

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
sys.path.insert(0, WS)
from repliz_client import get_client  # noqa: E402

WIB = datetime.timezone(datetime.timedelta(hours=7))
AKUN = {"tslaw_ig": "6a76a54d62caae1e04f30968", "tslaw_fb": "6a3b41d1c5ff4ce3a32753e8"}
DUMP = "/tmp/tslaw_sched.json"


def semua(c):
    docs, page = [], 1
    while page <= 80:
        r = None
        for a in range(5):
            try:
                r = c.get_schedules(page=page, limit=100)
                break
            except Exception:
                time.sleep(4 + 2 * a)
        if r is None:
            raise SystemExit("gagal baca jadwal Repliz")
        b = r.get("docs") or []
        docs += b
        if len(b) < 100:
            break
        page += 1
    return docs


def main():
    c = get_client()
    docs = semua(c)
    json.dump(docs, open(DUMP, "w"))
    print(f"total jadwal Repliz: {len(docs)} -> {DUMP}\n")

    for nama, aid in AKUN.items():
        own = [d for d in docs if d.get("accountId") == aid]
        st = Counter(str(d.get("status")) for d in own)
        tp = Counter(str(d.get("type")) for d in own)
        print(f"=== {nama} ({aid}) — {len(own)} jadwal")
        print("   status:", dict(st))
        print("   tipe  :", dict(tp))

        pending = [d for d in own if str(d.get("status")) == "pending"]
        jam = Counter()
        for d in pending:
            try:
                dt = datetime.datetime.fromisoformat(
                    str(d.get("scheduleAt")).replace("Z", "+00:00")).astimezone(WIB)
            except Exception:
                continue
            jam[f"{dt:%H:%M}"] += 1
        print("   jam pending (WIB):", dict(sorted(jam.items())))

        story = [d for d in own if str(d.get("type")) == "story"]
        print(f"   jadwal story: {len(story)}")
        for d in story[:10]:
            print(f"      {d.get('scheduleAt')} {d.get('status')} {d.get('title')}")

        sukses = [d for d in own if str(d.get("status")) == "success"]
        media = {}
        for d in sukses:
            for m in (d.get("medias") or []):
                nm = (m.get("url") or "").split("/")[-1]
                if nm:
                    media.setdefault(nm, []).append(d.get("scheduleAt"))
        print(f"   media PERNAH TAYANG: {len(media)} file unik")
        for nm in sorted(media):
            print(f"      {nm}  ({len(media[nm])}x)")
        if own:
            tgl = sorted(str(d.get("scheduleAt"))[:10] for d in sukses)
            print(f"   rentang success: {tgl[0] if tgl else '-'} … {tgl[-1] if tgl else '-'}")
        print()


if __name__ == "__main__":
    main()
