#!/usr/bin/env python3
"""Teks pasal KUHPerdata Buku III dari sumber: PDF Kejari Sukoharjo (kejaksaan.go.id) + Wikisumber."""
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"}
PASAL = ["Pasal 1234", "Pasal 1236", "Pasal 1243", "Pasal 1249", "Pasal 1250", "Pasal 1338", "Pasal 1754",
         "Pasal 1866", "Pasal 1967", "Pasal 1131", "Pasal 1132", "Pasal 613"]


def get(u, n=800000):
    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 pdf_teks(b):
    out = []
    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"\((?:[^()\\]|\\.)*\)", d):
            out.append(m.group(0)[1:-1].decode("latin-1", "replace"))
    t = " ".join(out)
    t = re.sub(r"\\([()\\])", r"\1", t)
    return re.sub(r"\s+", " ", t)


def html_teks(h):
    t = h.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)
    return re.sub(r"\s+", " ", t).strip()


def periksa(nama, t):
    print(f"\n=== {nama} (teks {len(t)} karakter)")
    for p in PASAL:
        m = re.search(re.escape(p) + r"\s", t)
        if m:
            print(f"  [{p}] {t[m.start():m.start()+400]}")


st, b = get("https://kejari-sukoharjo.kejaksaan.go.id/file/a6d2803a1ea733394063e8f006d31912.pdf")
print(f"PDF Kejari Sukoharjo → HTTP {st}, {len(b)} byte, PDF={b[:4] == b'%PDF'}")
if b[:4] == b"%PDF":
    periksa("KUHPerdata Buku III (PDF Kejaksaan)", pdf_teks(b))

st, h = get("https://id.wikisource.org/wiki/Kitab_Undang-Undang_Hukum_Perdata/Buku_Ketiga")
print(f"\nWikisumber Buku Ketiga → HTTP {st}, {len(h)} byte")
if st == 200:
    periksa("KUHPerdata Buku III (Wikisumber)", html_teks(h))
