#!/usr/bin/env python3
"""Audit link studiosoft.id di SEMUA jadwal pending ke depan (semua akun) — read-only.
Cari URL yang mati (bukan 200) + jadwal mana saja yang memakainya."""
import os, re, sys, json, subprocess
from concurrent.futures import ThreadPoolExecutor
sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import ReplizClient

c = ReplizClient()
all_docs, page = [], 1
while page < 80:
    res = c.get_schedules(page=page, limit=100)
    docs = res.get("docs", res.get("data", [])) if isinstance(res, dict) else res
    if not docs:
        break
    all_docs += docs
    if len(docs) < 100:
        break
    page += 1
print("total jadwal:", len(all_docs))

URL_RE = re.compile(r"https?://(?:www\.)?studiosoft\.id[^\s\"'<>)\]]*")

rows = []
for d in all_docs:
    if d.get("status") != "pending":
        continue
    sa = str(d.get("scheduleAt") or "")
    if sa < "2026-10-03T19:00":
        continue
    txt = (d.get("description") or "") + " " + json.dumps(d.get("replies") or [])
    urls = set(URL_RE.findall(txt))
    for u in urls:
        rows.append((u.rstrip(".,)") , d))

uniq = sorted({u for u, _ in rows})
print("jadwal pending ke depan:", sum(1 for d in all_docs if d.get("status") == "pending"),
      "| entri link:", len(rows), "| URL unik:", len(uniq))

def cek(u):
    r = subprocess.run(["curl", "-4", "-s", "-o", "/dev/null", "-w", "%{http_code}",
                        "--max-time", "45", u], capture_output=True, text=True)
    return u, r.stdout.strip()

with ThreadPoolExecutor(max_workers=6) as ex:
    hasil = dict(ex.map(cek, uniq))

mati = {u: code for u, code in hasil.items() if code != "200" and not u.endswith("/wp-json/")}
print("\n=== URL MATI / bukan 200 ===")
for u, code in sorted(mati.items()):
    pemakai = [(d.get("account", {}).get("name"), str(d.get("scheduleAt"))[:16], d.get("status"),
                d.get("_id") or d.get("id"), (d.get("title") or "")[:40]) for uu, d in rows if uu == u]
    print(f"[{code}] {u}  -> dipakai {len(pemakai)} jadwal")
    for p in pemakai[:8]:
        print("        ", p)
    if len(pemakai) > 8:
        print(f"         ... +{len(pemakai)-8} lagi")
print("\nURL 200:", sum(1 for v in hasil.values() if v == "200"), "/", len(hasil))
