#!/usr/bin/env python3
"""Teks resmi UU 1/2024 (Pasal 27A & 45 ayat (4)) dari PDF BPK + cek masa berlaku KUHP baru."""
import json, re, urllib.request, urllib.error, zlib

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
tok = json.load(open(f"{WS}/.serper_token.json"))
KEY = tok.get("api_key") or tok.get("key") or list(tok.values())[0]
UA = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124 Safari/537.36"}


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


def pdf_teks(b):
    out = []
    for m in re.finditer(rb"stream\r?\n(.*?)endstream", b, re.S):
        try:
            d = zlib.decompress(m.group(1))
        except Exception:
            continue
        if b"Tj" not in d and b"TJ" not in d:
            continue
        teks = []
        for mm in re.finditer(rb"\((?:\\.|[^\\()])*\)|<[0-9A-Fa-f\s]+>", d):
            g = mm.group(0)
            if g.startswith(b"("):
                teks.append(re.sub(rb"\\([()\\])", rb"\1", g[1:-1]).decode("latin-1", "replace"))
            else:
                h = re.sub(rb"\s", b"", g[1:-1])
                try:
                    teks.append(bytes.fromhex(h.decode()).decode("latin-1", "replace"))
                except Exception:
                    pass
        out.append(" ".join(teks))
    return re.sub(r"\s+", " ", "\n".join(out))


print("=== UU 1/2024 PDF BPK")
b = unduh("https://peraturan.bpk.go.id/Download/332870/UU%20Nomor%201%20Tahun%202024.pdf")
print("  bytes", len(b))
t = pdf_teks(b)
print("  teks", len(t))
for pat in [r"Pasal 27A", r"Pasal 45", r"empat ratus juta", r"dua tahun"]:
    print(f"\n  [{pat}]")
    for m in list(re.finditer(pat, t))[:3]:
        print(f"    ...{t[max(0,m.start()-200):m.start()+700]}...")

print("\n=== cek masa berlaku KUHP baru + UU 1/2024")
for q in ["UU 1/2023 KUHP Pasal 622 berlaku tiga tahun sejak diundangkan 2 Januari 2026",
          "UU 1 tahun 2024 perubahan kedua UU ITE diundangkan 2 Januari 2024"]:
    req = urllib.request.Request("https://google.serper.dev/search",
                                 data=json.dumps({"q": q, "gl": "id", "hl": "id", "num": 6}).encode(),
                                 headers={"X-API-KEY": KEY, "Content-Type": "application/json"})
    d = json.loads(urllib.request.urlopen(req, timeout=60).read())
    print("\n ", q)
    for o in d.get("organic", [])[:6]:
        print("   -", o.get("link"), "|", (o.get("snippet") or "")[:180])
