#!/usr/bin/env python3
"""Cek fakta artikel konsultan pajak - tahap 3: UU KUP (jdih) Pasal 25-27, gugatan UU 14/2002, PMK 111 alternatif."""
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=6000000):
    try:
        r = urllib.request.Request(u, headers=UA)
        with urllib.request.urlopen(r, timeout=120) 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).replace("&amp;", "&")
    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"\[(.*?)\]\s*TJ", d, re.S):
            for s in re.finditer(rb"\(([^()\\]*)\)", m.group(1)):
                hasil.append(s.group(1).decode("latin-1", "replace"))
        for m in re.finditer(rb"\(([^()\\]{2,})\)", d):
            hasil.append(m.group(1).decode("latin-1", "replace"))
    return re.sub(r"\s+", " ", " ".join(hasil))


def potong(t, pat, sebelum=60, sesudah=900, maks=2):
    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)


st, b = get("https://jdih.kemenkeu.go.id/api/download/fulltext/2007/28TAHUN2007UU.htm")
print(f"\n=== UU 28/2007 (perubahan KUP) -> HTTP {st} {len(b)}B")
t = teks(b)
print("   teks", len(t))
for p in [r"Pasal 25\s*$", r"Pasal 25\s*\(\d\)", r"Pasal 26\s*\(\d\)", r"Pasal 27\s*\(\d\)"]:
    potong(t, p)
i = t.find("Pasal 25")
print("\n--- blok Pasal 25-27 ---")
print(t[i:i + 3800])
open("/tmp/kup2007.txt", "w").write(t)

st, b = get("https://jdih.kemenkeu.go.id/api/download/fulltext/2002/14TAHUN2002UU.htm")
t2 = teks(b)
print(f"\n=== UU 14/2002 cari 'Gugatan' + tenggat -> HTTP {st}")
potong(t2, r"Gugatan diajukan", 200, 900, 3)
potong(t2, r"Pasal 35\s*\(\d\)", 0, 700, 3)
potong(t2, r"Pasal 40\s*\(\d\)", 0, 700, 2)

st, b = get("https://peraturan.bpk.go.id/Download/29542/PMK%20111%20PMK.03%202014.pdf")
print(f"\n=== PMK 111/2014 (bpk) -> HTTP {st} {len(b)}B")
if b[:4] == b"%PDF":
    t3 = pdf_text(b)
    print("   teks", len(t3), "| awal:", t3[:160])
    for p in [r"Pasal 2\b", r"Pasal 4\b", r"Pasal 5\b", r"izin praktik", r"sumpah"]:
        potong(t3, p)
    open("/tmp/pmk111.txt", "w").write(t3)
