#!/usr/bin/env python3
"""Cek fakta #3313 tahap 2 - buka teks resmi: UU 30/1999, Perma 1/2016 (status), Keppres 34/1981, KUHPerdata 1338 & 1243."""
import re, zlib, urllib.request, urllib.error

UA = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124 Safari/537.36"}


def get(u, n=4000000):
    try:
        r = urllib.request.Request(u, headers=UA)
        with urllib.request.urlopen(r, timeout=90) as x:
            return x.status, x.read(n)
    except urllib.error.HTTPError as e:
        return e.code, b""
    except Exception as e:
        return type(e).__name__, b""


def teks(b):
    t = b.decode("utf-8", "replace")
    t = re.sub(r"<(script|style)[^>]*>.*?</\1>", " ", t, flags=re.S | re.I)
    t = re.sub(r"<[^>]+>", " ", t)
    t = re.sub(r"&nbsp;?", " ", t)
    t = re.sub(r"&amp;", "&", t)
    return re.sub(r"\s+", " ", t).strip()


def pdf_text(b):
    hasil = []
    for c in re.findall(rb"stream\r?\n(.*?)endstream", b, re.S):
        try:
            d = zlib.decompress(c)
        except Exception:
            continue
        for m in re.finditer(rb"\(([^()\\]{2,})\)", d):
            hasil.append(m.group(1).decode("latin-1", "replace"))
        for m in re.finditer(rb"\[(.*?)\]\s*TJ", d, re.S):
            for s in re.finditer(rb"\(([^()\\]*)\)", m.group(1)):
                hasil.append(s.group(1).decode("latin-1", "replace"))
    return re.sub(r"\s+", " ", " ".join(hasil))


def potong(t, pat, sebelum=80, sesudah=520, maks=3):
    n = 0
    for m in re.finditer(pat, t, re.I):
        a, z = max(0, m.start() - sebelum), min(len(t), m.start() + sesudah)
        print(f"  >{t[a:z]}")
        n += 1
        if n >= maks:
            break
    if n == 0:
        print("  [TIDAK DITEMUKAN]", pat)
    return n


def buka(url, label, pola):
    st, b = get(url)
    print(f"\n=== {label} -> HTTP {st} {len(b)}B  {url}")
    if st != 200 or not b:
        return ""
    t = pdf_text(b) if b[:4] == b"%PDF" else teks(b)
    print(f"    teks {len(t)} karakter | sampel: {t[:180]}")
    for p in pola:
        potong(t, p)
    return t


# 1) UU 30/1999 Arbitrase
t30 = buka("https://peraturan.bpk.go.id/Download/158596/UU_1999_30.pdf", "UU 30/1999", [
    r"Pasal 1\b", r"Pasal 3\b", r"Pasal 5\b", r"Pasal 11\b", r"Pasal 59\b", r"Pasal 60\b", r"Pasal 70\b",
])
open("/tmp/uu30.txt", "w").write(t30)

# 2) Perma 1/2016 mediasi (cek juga apakah dicabut Perma 3/2022)
buka("https://peraturan.bpk.go.id/Details/209641/perma-no-1-tahun-2016", "Perma 1/2016 (halaman status)", [
    r"Status", r"Berlaku", r"Diubah", r"Dicabut", r"Mediasi",
])
buka("https://peraturan.bpk.go.id/Details/217289/perma-no-3-tahun-2022", "Perma 3/2022 (cek judul)", [
    r"tentang", r"Status", r"Dicabut", r"Mencabut",
])
