#!/usr/bin/env python3
"""Cek fakta tahap 3: rincian pasal 35/100, alur DJKI, paten UU 13/2016 + UU 65/2024."""
import json, re, zlib, urllib.request, urllib.error

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
OUT = f"{WS}/tslaw_pemulihan/perbaikan_20261020"
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 html(u):
    try:
        with urllib.request.urlopen(urllib.request.Request(u, headers=UA), timeout=120) as x:
            b = x.read(4000000)
    except urllib.error.HTTPError as e:
        return f"HTTP {e.code}"
    except Exception as e:
        return f"ERR {str(e)[:80]}"
    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;|&#160;", " ", t)
    return re.sub(r"\s+", " ", t).strip()


def pdf(u):
    try:
        b = urllib.request.urlopen(urllib.request.Request(u, headers=UA), timeout=180).read()
    except urllib.error.HTTPError as e:
        return f"HTTP {e.code}"
    except Exception as e:
        return f"ERR {str(e)[:80]}"
    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
        pot = []
        for t in re.finditer(rb"\((?:[^()\\]|\\.)*\)|TJ|Tj|T\*|Td|TD", d):
            g = t.group(0)
            if g.startswith(b"("):
                s = g[1:-1].decode("latin-1")
                s = re.sub(r"\\([0-7]{1,3})", lambda mm: chr(int(mm.group(1), 8)), s)
                pot.append(s.replace(r"\(", "(").replace(r"\)", ")"))
            elif g in (b"Td", b"TD", b"T*"):
                pot.append("\n")
        out.append("".join(pot))
    return re.sub(r"\s+", " ", "\n".join(out))


def cuplik(t, pat, lebar=600, n=2, sebelum=120):
    for m in list(re.finditer(pat, t, re.I))[:n]:
        print(f"   [{pat}] ...{t[max(0,m.start()-sebelum):m.start()+lebar]}...\n")


print("=== KLINIK perpanjangan merek")
t = html("https://www.hukumonline.com/klinik/a/bisakah-orang-lain-menggunakan-merek-terdaftar-jika-tak-diperpanjang-lt664070153fded/")
print("  len", len(t))
if len(t) > 2000:
    cuplik(t, r"6 \(enam\) bulan", 700)
    cuplik(t, r"daluwarsa", 500, 1)

print("\n=== KLINIK pidana merek (ayat 2)")
t = html("https://www.hukumonline.com/klinik/a/adakah-hukuman-jika-tak-sengaja-menggunakan-merek-pihak-lain-lt53e08e8a9f330/")
print("  len", len(t))
if len(t) > 2000:
    cuplik(t, r"Pasal 100 ayat \(1\) dan \(2\)", 1200, sebelum=40)
    cuplik(t, r"Hak atas Merek", 400, 1, sebelum=200)

print("\n=== DGIP alur pemeriksaan merek")
t = html("https://www.dgip.go.id/artikel/detail-artikel-berita/pemeriksaan-merek-dalam-proses-pendaftaran-merek")
print("  len", len(t))
if len(t) > 2000:
    cuplik(t, r"pemeriksaan formalitas", 600, 2)
    cuplik(t, r"150", 600, 1)

print("\n=== UU 13/2016 paten (PDF UGM)")
t = pdf("https://penelitian.ugm.ac.id/wp-content/uploads/sites/295/2021/01/UU-Nomor-13-Tahun-2016.pdf")
print("  len", len(t) if isinstance(t, str) else t)
if isinstance(t, str) and len(t) > 3000:
    open(f"{OUT}/uu13_2016_paten.txt", "w").write(t)
    cuplik(t, r"Pasal 22", 500, 1)
    cuplik(t, r"Pasal 23", 400, 1)

print("\n=== UU 65/2024 (BPK)")
t = html("https://peraturan.bpk.go.id/Details/306515/uu-no-65-tahun-2024")
print("  len", len(t))
if len(t) > 2000:
    cuplik(t, r"berlaku", 300, 1, sebelum=60)
