#!/usr/bin/env python3
"""Tarik teks PDF resmi UU HKI (zlib, tanpa pustaka PDF) lalu cuplik pasal kunci."""
import re, zlib, urllib.request, urllib.error, sys

UA = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124 Safari/537.36"}
OUT = "/home/mantapman/.hermes/profiles/atun/workspace/tslaw_pemulihan/perbaikan_20261020"

SRC = {
    "merek": "https://peraturan.bpk.go.id/Download/26689/UU%20Nomor%2020%20Tahun%202016.pdf",
    "hakcipta": "https://peraturan.bpk.go.id/Download/28018/UU%20Nomor%2028%20Tahun%202014.pdf",
    "desain": "https://peraturan.bpk.go.id/Download/33520/UU%20Nomor%2031%20Tahun%202000.pdf",
}


def unduh(u):
    req = urllib.request.Request(u, headers=UA)
    with urllib.request.urlopen(req, timeout=180) as x:
        return x.read()


def unescape(s):
    s = s.replace(r"\(", "(").replace(r"\)", ")").replace(r"\\", "\\")
    s = re.sub(r"\\([0-7]{1,3})", lambda m: chr(int(m.group(1), 8)), s)
    s = s.replace(r"\n", " ").replace(r"\r", " ").replace(r"\t", " ")
    return s


def pdf_teks(b):
    out = []
    for m in re.finditer(rb"stream\r?\n(.*?)endstream", b, re.S):
        raw = m.group(1)
        try:
            d = zlib.decompress(raw)
        except Exception:
            continue
        if b"Tj" not in d and b"TJ" not in d:
            continue
        potong = []
        for t in re.finditer(rb"\((?:[^()\\]|\\.)*\)|TJ|Tj|T\*|Td|TD", d):
            g = t.group(0)
            if g.startswith(b"("):
                potong.append(unescape(g[1:-1].decode("latin-1")))
            elif g in (b"Td", b"TD", b"T*"):
                potong.append("\n")
        out.append("".join(potong))
    t = "\n".join(out)
    t = re.sub(r"[ \t]+", " ", t)
    t = re.sub(r"\n{3,}", "\n\n", t)
    return t


def cuplik(t, pat, lebar=700):
    t2 = re.sub(r"\s+", " ", t)
    hasil = []
    for m in re.finditer(pat, t2, re.I):
        hasil.append(t2[m.start():m.start() + lebar])
    return hasil


for nama, url in SRC.items():
    try:
        b = unduh(url)
    except urllib.error.HTTPError as e:
        print(f"{nama}: HTTP {e.code}")
        continue
    t = pdf_teks(b)
    open(f"{OUT}/uu_{nama}.txt", "w").write(t)
    print(f"{nama}: {len(b)} bytes pdf -> {len(t)} char teks")

t = open(f"{OUT}/uu_merek.txt").read()
print("\n### MEREK UU 20/2016")
for pat, lab in [(r"Pasal 3 ", "Pasal 3 (hak setelah terdaftar)"),
                 (r"Pasal 35", "Pasal 35 (jangka waktu)"),
                 (r"Pasal 4 ", "Pasal 4 (pemohon)"),
                 (r"Pasal 20", "Pasal 20 (penolakan)"),
                 (r"Pasal 100", "Pasal 100 (pidana)")]:
    for x in cuplik(t, pat)[:1]:
        print(f"\n[{lab}] {x}")

for f, pats in [("uu_hakcipta.txt", [(r"Pasal 58", "HC Pasal 58"), (r"Pasal 59", "HC Pasal 59"),
                                     (r"Pasal 66", "HC Pasal 66 (pencatatan)")]),
                ("uu_desain.txt", [(r"Pasal 5", "DI Pasal 5"), (r"Pasal 2", "DI Pasal 2")])]:
    t = open(f"{OUT}/{f}").read()
    print(f"\n### {f}")
    for pat, lab in pats:
        for x in cuplik(t, pat)[:1]:
            print(f"\n[{lab}] {x}")
