#!/usr/bin/env python3
"""Cek status jadwal SEMUA akun TSC (IG/Threads/FB/LinkedIn) sekali tarik.

Fetch dump Repliz sekali, lalu tampilkan: ringkasan status per akun,
daftar jadwal error, dan jadwal pending dari 18 Sep 2026 ke atas (WIB).
"""
import json
import sys
from collections import Counter
from datetime import datetime, timedelta

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

TSC = {
    "IG": "6a86a7e062caae1e04ff8244",
    "Threads": "6a4bbc5920e4f4f195e52960",
    "FB": "6a3b41ddc5ff4ce3a327542c",
    "LinkedIn": "6a4da7f520e4f4f195e796e1",
}
ID2NAME = {v: k for k, v in TSC.items()}

SINCE = "2026-09-18"


def wib(s):
    if not s:
        return "-"
    try:
        return (datetime.fromisoformat(s.replace("Z", "+00:00"))
                + timedelta(hours=7)).strftime("%Y-%m-%d %H:%M")
    except Exception:
        return s


c = get_client()
first = c.get_schedules(page=1, limit=100)
total = first.get("totalDocs", 0)
docs = list(first.get("docs", []))
for p in range(2, (total + 99) // 100 + 1):
    docs.extend(c.get_schedules(page=p, limit=100).get("docs", []))
print(f"total semua akun: {total} (fetched {len(docs)})\n")


def acc_id(d):
    a = d.get("account") or {}
    return d.get("accountId") or a.get("id") or a.get("_id")


mine = [d for d in docs if acc_id(d) in ID2NAME]
print(f"jadwal TSC (4 akun): {len(mine)}\n")

for name, aid in TSC.items():
    sub = [d for d in mine if acc_id(d) == aid]
    cnt = Counter((d.get("status") or "?").lower() for d in sub)
    print(f"{name:9s} n={len(sub):3d}  " + "  ".join(f"{k}={v}" for k, v in cnt.most_common()))

errs = [d for d in mine if (d.get("status") or "").lower() == "error"]
print(f"\n=== ERROR ({len(errs)}) ===")
for d in sorted(errs, key=lambda x: x.get("scheduleAt") or ""):
    print(f"{wib(d.get('scheduleAt'))} | {ID2NAME[acc_id(d)]:8s} | {d.get('type')} | {d.get('id')}")
    print(f"   media: {[m.get('url') for m in (d.get('medias') or [])]}")
    print(f"   err: {(d.get('errorMessage') or '')[:220]}")

print(f"\n=== PENDING sejak {SINCE} (WIB) ===")
pend = [d for d in mine if (d.get("status") or "").lower() == "pending"
        and (wib(d.get("scheduleAt"))[:10] >= SINCE)]
for d in sorted(pend, key=lambda x: (x.get("scheduleAt") or "", ID2NAME[acc_id(d)])):
    med = (d.get("medias") or [{}])[0].get("url", "")
    tit = (d.get("title") or d.get("description") or "").replace("\n", " ")[:60]
    print(f"{wib(d.get('scheduleAt'))} | {ID2NAME[acc_id(d)]:8s} | {d.get('type'):5s} | "
          f"replies={len(d.get('replies') or [])} | {d.get('id')} | {tit} | {med.rsplit('/', 1)[-1]}")

with open("/home/mantapman/.hermes/profiles/atun/workspace/cek_status_tsc_all.json", "w") as f:
    json.dump(mine, f, indent=1, ensure_ascii=False)
