#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Verifikasi perbaikan link mati: tidak ada lagi URL 404 lama di jadwal pending,
plus klasifikasi target baru (live vs menunggu tayang)."""
import json, re, subprocess, sys
from concurrent.futures import ThreadPoolExecutor
sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import ReplizClient

LAMA = json.load(open("/tmp/link_mati.json")).keys()

c = ReplizClient()
docs, page = [], 1
while page < 80:
    r = c.get_schedules(page=page, limit=100)
    d = r.get("docs") or []
    docs += d
    if len(d) < 100:
        break
    page += 1
print("total jadwal:", len(docs))

sisa = []
for d in docs:
    txt = (d.get("description") or "") + " " + json.dumps(d.get("replies") or [])
    for u in LAMA:
        if u in txt:
            sisa.append((d.get("id"), d.get("status"), u))
print("SISA URL MATI:", len(sisa))
for s in sisa[:20]:
    print("   ", s)

URL_RE = re.compile(r"https?://(?:www\.)?studiosoft\.id[^\s\"'<>)\]]*")
urls = set()
for d in docs:
    if d.get("status") != "pending":
        continue
    for u in URL_RE.findall((d.get("description") or "") + " " + json.dumps(d.get("replies") or [])):
        urls.add(u.rstrip(".,)"))
urls = sorted(urls)
print("URL studiosoft.id di jadwal pending:", len(urls))


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


with ThreadPoolExecutor(max_workers=8) as ex:
    hasil = dict(ex.map(cek, urls))
mati = {u: s for u, s in hasil.items() if s not in ("200", "301", "302")}
print("masih bukan 200/301/302:", len(mati))
for u, s in sorted(mati.items()):
    n = sum(1 for d in docs if d.get("status") == "pending" and u in (d.get("description") or ""))
    print(f"   [{s}] x{n:3}  {u}")
