#!/usr/bin/env python3
"""Verifikasi halaman publik #2931 tslaw.id setelah perbaikan 16 Okt 2026 (dengan cache buster)."""
import json, re, time, urllib.request, urllib.error

UA = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124 Safari/537.36"}
FOLDER = "/home/mantapman/.hermes/profiles/atun/workspace/tslaw_pemulihan/perbaikan_20261016"
SLUG = "6-cara-mendapatkan-bantuan-hukum-gratis-di-surabaya-untuk-masyarakat"
URL = f"https://www.tslaw.id/{SLUG}/?nocache={int(time.time())}"

H2_BARU = ["Dasar Hukum Bantuan Hukum Gratis di Indonesia",
           "Bantuan Hukum Litigasi dan Nonlitigasi, Apa Bedanya",
           "Cara Memastikan Lembaga Bantuan Hukum Resmi",
           "Larangan Meminta Bayaran yang Perlu Diketahui",
           "Layanan Cuma-Cuma di Pengadilan: Posbakum dan Pembebasan Biaya Perkara"]


def get(u, timeout=60):
    r = urllib.request.Request(u, headers=UA)
    try:
        with urllib.request.urlopen(r, timeout=timeout) as x:
            return x.status, x.read().decode("utf-8", "replace")
    except urllib.error.HTTPError as e:
        return e.code, ""
    except Exception as e:
        return type(e).__name__, ""


st, html = get(URL)
print(f"HTTP {st}  {URL}  ({len(html)} byte)")
open(f"{FOLDER}/live_2931_verifikasi.html", "w").write(html)

teks = re.sub(r"<script[^>]*>.*?</script>", " ", html, flags=re.S | re.I)
teks = re.sub(r"&nbsp;?", " ", teks)
hasil = {"url": URL, "http": st, "h2_baru_tampil": [h for h in H2_BARU if h in teks],
         "h2_baru_hilang": [h for h in H2_BARU if h not in teks],
         "font_big": html.count("dikonfirmasi") == 0}

# FAQ tampil + skema
faq_tampil = re.findall(r"<h3[^>]*>([^<]*\?)</h3>", teks)
hasil["faq_tampil"] = len(faq_tampil)
hasil["faq_tampil_daftar"] = faq_tampil

skema_valid, skema_item, skema_semua_tampil = False, 0, None
for m in re.finditer(r'<script[^>]*type="application/ld\+json"[^>]*>(.*?)</script>', html, re.S):
    try:
        d = json.loads(m.group(1))
    except Exception:
        continue
    for obj in (d if isinstance(d, list) else [d]):
        if isinstance(obj, dict) and obj.get("@type") == "FAQPage":
            skema_valid = True
            item = obj.get("mainEntity", [])
            skema_item = len(item)
            skema_semua_tampil = all(q["name"] in teks for q in item)
hasil.update({"skema_faqpage_valid": skema_valid, "skema_item": skema_item,
              "skema_tanya_semua_tampil": skema_semua_tampil})

# tombol WA
hasil["tombol_wa"] = len(re.findall(r"wa\.me/6281909222026", html))

# tautan internal di halaman
tautan = sorted(set(re.findall(r'href="(https://www\.tslaw\.id/[^"#?]+)"', html)))
mati, hidup = [], []
for u in tautan:
    s, _ = get(u, timeout=45)
    (hidup if s == 200 else mati).append((s, u))
hasil["tautan_internal_total"] = len(tautan)
hasil["tautan_mati"] = mati
hasil["tautan_hidup"] = len(hidup)

json.dump(hasil, open(f"{FOLDER}/live_2931_verifikasi.json", "w"), ensure_ascii=False, indent=1)
print(json.dumps(hasil, ensure_ascii=False, indent=1))

# pemeriksaan isi baru benar-benar terlihat di halaman
if st != 200 or hasil["h2_baru_hilang"] or not skema_valid or skema_item != hasil["faq_tampil"] or mati:
    print("\nPERHATIAN: ada yang belum lolos, periksa keluaran di atas (cache buster mungkin diabaikan).")
    raise SystemExit(1)
print("\nVERIFIKASI LOLOS: 200, 5 H2 baru tampil, FAQ tampil = item skema =", skema_item,
      ", 0 tautan mati, tombol WA ada.")
