#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Audit status jadwal TS Law di Repliz (semua akun, read-only).

Pakai: python3 audit_tslaw_repliz.py [hari]
"""
import sys, datetime, collections
sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import get_client

AKUN = {
    "6a35f8b7c5ff4ce3a322b2ed": "TSLAW Threads",
    "6a76a54d62caae1e04f30968": "TSLAW IG",
    "6a3b41d1c5ff4ce3a32753e8": "TSLAW FB",
    "6a60101562caae1e04e901ac": "TSLAW LinkedIn",
}
WIB = datetime.timezone(datetime.timedelta(hours=7))
hari = int(sys.argv[1]) if len(sys.argv) > 1 else 21
sekarang = datetime.datetime.now(datetime.timezone.utc)
batas = sekarang + datetime.timedelta(days=hari)

c = get_client()
docs, page = [], 1
while True:
    r = c.get(f"/public/schedule?page={page}&limit=100")
    d = r.get("docs") or []
    docs.extend(d)
    if not d or page * 100 >= (r.get("totalDocs") or 0):
        break
    page += 1
print("total jadwal semua akun:", len(docs))


def ke_wib(t):
    try:
        return datetime.datetime.fromisoformat(t.replace("Z", "+00:00")).astimezone(WIB)
    except Exception:
        return None


for acc, nama in AKUN.items():
    mine = [x for x in docs if (x.get("account") or {}).get("_id") == acc]
    mine.sort(key=lambda x: x.get("scheduleAt") or "")
    sukses = [x for x in mine if x.get("status") == "success"]
    pending = [x for x in mine if x.get("status") == "pending"]
    error = [x for x in mine if x.get("status") == "error"]
    print(f"\n=== {nama} ({acc}) ===")
    print(f"  total {len(mine)} | success {len(sukses)} | pending {len(pending)} | error {len(error)}")
    if sukses:
        t = ke_wib(sukses[-1].get("scheduleAt"))
        print(f"  terakhir TAYANG: {t:%d %b %H:%M WIB} — {(sukses[-1].get('title') or '')[:55]}")
    depan = [x for x in pending if (ke_wib(x.get('scheduleAt')) or sekarang) >= sekarang]
    print(f"  pending ke depan: {len(depan)}")
    per_hari = collections.Counter()
    for x in depan:
        t = ke_wib(x.get("scheduleAt"))
        per_hari[t.strftime("%d %b")] += 1
    if per_hari:
        print("  sebaran:", dict(sorted(per_hari.items(), key=lambda kv: kv[1])))
    for x in depan[:14]:
        t = ke_wib(x.get("scheduleAt"))
        print(f"    {t:%d %b %H:%M} | {x.get('type'):5} | media={len(x.get('medias') or [])} | "
              f"rep={len(x.get('replies') or [])} | {(x.get('title') or '')[:50]}")
    if len(depan) > 14:
        print(f"    ... {len(depan)-14} jadwal lagi")
    # error yang jadwalnya masih di depan / hari ini
    err_depan = [x for x in error if (ke_wib(x.get('scheduleAt')) or sekarang) >= sekarang - datetime.timedelta(days=1)]
    if err_depan:
        print("  ⚠️ error hari ini/ke depan:")
        for x in err_depan:
            t = ke_wib(x.get("scheduleAt"))
            print(f"    {t:%d %b %H:%M} | {(x.get('errorMessage') or '')[:70]}")
