#!/usr/bin/env python3
"""Baca semua jadwal Repliz yang status=error (mis. 7 hari terakhir) + pesan errornya."""
import json, sys, time, datetime, collections
sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import get_client


def fetch_all():
    c = get_client()
    r = c.get_schedules(page=1, limit=100)
    total = r["totalDocs"]
    pages = (total + 99) // 100
    docs = list(r["docs"])
    for p in range(2, pages + 1):
        docs.extend(c.get_schedules(page=p, limit=100)["docs"])
    return docs


def main():
    days = int(sys.argv[1]) if len(sys.argv) > 1 else 7
    docs = fetch_all()
    cutoff = time.time() * 1000 - days * 86400 * 1000
    rows = []
    for d in docs:
        if (d.get("status") or "").lower() != "error":
            continue
        try:
            ts = datetime.datetime.fromisoformat(d["scheduleAt"].replace("Z", "+00:00")).timestamp() * 1000
        except Exception:
            ts = 0
        if ts < cutoff:
            continue
        acct = (d.get("account") or {})
        rows.append({
            "wib": (datetime.datetime.utcfromtimestamp(ts / 1000) + datetime.timedelta(hours=7)).strftime("%d %b %H:%M"),
            "acct": acct.get("name", "?"),
            "type": acct.get("type", "?"),
            "ttl": (d.get("title") or d.get("description") or "")[:60].replace("\n", " "),
            "err": (d.get("errorMessage") or "")[:160],
            "id": d.get("_id") or d.get("id"),
            "nmedia": len(d.get("medias") or []),
        })
    rows.sort(key=lambda r: r["wib"])
    print(f"total jadwal: {len(docs)} · error {days} hari terakhir: {len(rows)}")
    by = collections.Counter((r["acct"], r["err"][:60]) for r in rows)
    for (acct, err), n in by.most_common():
        print(f"  {n:>3}x  {acct:<28} {err}")
    print("--- detail ---")
    for r in rows[-40:]:
        print(json.dumps(r, ensure_ascii=False))


if __name__ == "__main__":
    main()
