#!/usr/bin/env python3
"""Repliz: periksa jadwal yang GAGAL (status=error) — cek apakah penyebabnya media mati atau hal lain."""
import json, os, re, sys, urllib.request, urllib.error
from collections import Counter, defaultdict

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

NAMA = {getattr(ACC, n): n for n in dir(ACC) if not n.startswith("_")}
client = get_client()

semua = []
page = 1
while True:
    d = client.get_schedules(page=page, limit=100)
    docs = d.get("docs", []) if isinstance(d, dict) else []
    semua += docs
    if len(docs) < 100:
        break
    page += 1
print(f"total jadwal terbaca: {len(semua)}")

gagal = [s for s in semua if s.get("status") == "error"]
print(f"jadwal GAGAL: {len(gagal)}")
per_akun = Counter(NAMA.get(s.get("accountId"), s.get("accountId")) for s in gagal)
print("\nsebaran per akun:")
for a, n in per_akun.most_common():
    print(f"   {n:>4}x {a}")

print("\n=== 12 kegagalan terbaru ===")
def waktu(s):
    return str(s.get("scheduleAt") or "")
for s in sorted(gagal, key=waktu, reverse=True)[:12]:
    akun = NAMA.get(s.get("accountId"), s.get("accountId"))
    jenis = s.get("type") or "?"
    media = ""
    med = s.get("medias") or s.get("media") or []
    if isinstance(med, list) and med:
        media = str(med[0].get("url") if isinstance(med[0], dict) else med[0])[:80]
    desc = re.sub(r"\s+", " ", str(s.get("description") or ""))[:70]
    print(f"   {waktu(s)[:16]} | {akun:<22} | {jenis:<6} | {desc}")
    if media:
        print(f"        media: {media}")
    for k in ("error", "errorMessage", "message", "note"):
        if s.get(k):
            print(f"        {k}: {str(s[k])[:120]}")

print("\n=== kunci yang tersedia pada satu jadwal gagal (untuk telusur lanjut) ===")
if gagal:
    print("   ", sorted(gagal[0].keys()))
json.dump({"total": len(semua), "gagal": gagal}, open(f"{WS}/drafts/repliz_gagal.json", "w"), indent=1, ensure_ascii=False)
print("\n→ drafts/repliz_gagal.json")
