#!/usr/bin/env python3
"""Cek pasal Perma 1/2016 (mediasi) dan Perma 3/2022 dari sumber yang terbuka."""
import re, urllib.request, urllib.error, zlib

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


def ambil(u, batas=8000000):
    try:
        with urllib.request.urlopen(urllib.request.Request(u, headers=UA), timeout=120) as x:
            return x.read(batas)
    except urllib.error.HTTPError as e:
        print("  HTTP", e.code, u)
    except Exception as e:
        print("  ERR", str(e)[:70], u)
    return b""


def bersih(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)
    return re.sub(r"\s+", " ", t.replace("&nbsp;", " ")).strip()


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
        pot = b""
        for tm in re.finditer(rb"\((?:\\.|[^\\()])*\)", d):
            pot += tm.group(0)[1:-1] + b" "
        out.append(pot.decode("latin-1", "replace"))
    return re.sub(r"\s+", " ", " ".join(out))


SUMBER = [
    ("https://www.hukumonline.com/berita/a/ini-poin-penting-yang-diatur-dalam-perma-no1-tahun-2016-lt56bb2d4541fd5/",
     ["30 (tiga puluh) hari", "hari kerja", "itikad baik", "Pasal 4", "Pasal 13", "Pasal 22", "Pasal 23",
      "Pasal 29", "biaya", "tidak dapat diterima", "gugatan sederhana"]),
    ("https://www.mahkamahagung.go.id/media/8757",
     ["tiga puluh hari", "itikad baik", "Pasal 13", "Pasal 22", "Pasal 29", "tidak dapat diterima"]),
]
for u, kws in SUMBER:
    print("\n=====", u)
    t = bersih(ambil(u))
    if not t:
        continue
    print("panjang:", len(t))
    if t[:4] == "%PDF":
        t = pdf_teks(ambil(u))
        print("pdf teks:", len(t))
    for kw in kws:
        for m in list(re.finditer(re.escape(kw), t, re.I))[:2]:
            print(f"\n[{kw}] ...{t[max(0,m.start()-280):m.start()+320]}...")
