#!/usr/bin/env python3
"""Audit jadwal StudioSoft (Threads/LinkedIn/FB/IG) — untuk run hc72.

Dump: semua docs pending/scheduled/draft untuk 4 akun SS dari hari ini ke depan,
plus jejak Threads per judul (untuk memilih RE-AIR paling tua).
"""
import json
import os
import sys
from datetime import datetime, timedelta, timezone

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
sys.path.insert(0, WS)
from repliz_client import ReplizClient, ACC
import repliz_openssl_transport

repliz_openssl_transport.install(verbose=False)

c = ReplizClient()
EP = "/public/schedule?page=%d&limit=100"


def get_retry(ep, tries=6):
    import time
    last = None
    for i in range(tries):
        try:
            return c.get(ep)
        except Exception as e:
            last = e
            time.sleep(3 + 3 * i)
    raise last


docs, page = [], 1
while True:
    d = get_retry(EP % page)
    docs.extend(d.get("docs", []))
    tp = d.get("totalPages") or 1
    if page >= tp:
        break
    page += 1
print("TOTAL DOCS:", len(docs))

names = {
    ACC.STUDIOSOFT_THREADS: "THR",
    ACC.STUDIOSOFT_LINKEDIN: "LI",
    ACC.STUDIOSOFT_FB: "FB",
    ACC.STUDIOSOFT_IG: "IG",
}
now = datetime.now(timezone.utc)
print("NOW UTC:", now.strftime("%Y-%m-%d %H:%M"), "| WIB:",
      (now + timedelta(hours=7)).strftime("%Y-%m-%d %H:%M"))

rows = []
for s in docs:
    aid = s.get("accountId")
    if aid not in names:
        continue
    st = (s.get("status") or "").lower()
    if st not in ("pending", "scheduled", "draft"):
        continue
    at = (s.get("scheduleAt") or "")
    rows.append((at, names[aid], st, s.get("type"), (s.get("title") or "")[:70],
                 s.get("_id") or s.get("id"),
                 [os.path.basename((m.get("url") or "").split("?")[0]) for m in (s.get("medias") or [])],
                 len(s.get("replies") or [])))

rows.sort()
print("\n=== MENDATANG (pending/scheduled/draft) ===")
for r in rows:
    print("%s | %s | %-9s | %-8s | %-70s | %s | med=%s | rep=%d" %
          (r[0][:19], r[1], r[2], r[3], r[4], r[5], ",".join(r[6])[:60], r[7]))

json.dump([{"at": r[0], "acc": r[1], "status": r[2], "type": r[3], "title": r[4],
            "id": r[5], "medias": r[6], "replies": r[7]} for r in rows],
          open(WS + "/_ss_hc72_future.json", "w"), indent=1)

# jejak Threads terakhir per judul
print("\n=== JEJAK THREADS TERAKHIR PER JUDUL (semua status) ===")
last = {}
for s in docs:
    if s.get("accountId") != ACC.STUDIOSOFT_THREADS:
        continue
    t = (s.get("title") or "").strip()
    if not t:
        continue
    at = (s.get("scheduleAt") or "")[:19]
    st = (s.get("status") or "").lower()
    cur = last.get(t)
    if cur is None or at < cur[0]:
        last[t] = (at, st)
for t in sorted(last, key=lambda k: last[k][0]):
    print("%s | %-9s | %s" % (last[t][0], last[t][1], t[:80]))
