#!/usr/bin/env python3
"""Verifikasi akhir: Pasal 433 ayat (2) KUHP, Pasal 29 ayat (1) UU 1/2023, KUHAP 108,
UU 11/2008 Pasal 5, UU 40/1999 Pasal 5, status URL pilar."""
import json, re, urllib.request, urllib.error

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 cari(q, n=6):
    req = urllib.request.Request("https://google.serper.dev/search",
                                 data=json.dumps({"q": q, "gl": "id", "hl": "id", "num": n}).encode(),
                                 headers={"X-API-KEY": KEY, "Content-Type": "application/json"})
    return json.loads(urllib.request.urlopen(req, timeout=60).read())


def html(u):
    try:
        with urllib.request.urlopen(urllib.request.Request(u, headers=UA), timeout=120) as x:
            b = x.read(4000000)
            st = x.status
    except urllib.error.HTTPError as e:
        return e.code, ""
    except Exception as e:
        return 0, f"ERR {e}"
    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 st, re.sub(r"\s+", " ", t).strip()


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

print("=== Pasal 433 ayat (2) + pengecualian")
_, t = html("https://www.hukumonline.com/klinik/a/pasal-433-kuhp-baru-tentang-pencemaran-nama-baik-lt65b71f5a49552/")
c(t, r"pencemaran tertulis, dengan pidana penjara paling lama", 500, 2)
c(t, r"kepentingan umum", 400, 1)

print("=== Pasal 29 ayat (1) UU 1/2023")
for o in cari("Pasal 29 ayat (1) UU 1/2023 tenggang waktu 6 bulan sejak tanggal mengetahui tindak pidana aduan").get("organic", [])[:5]:
    print("  -", o.get("link"), "|", (o.get("snippet") or "")[:200])

print("\n=== KUHAP Pasal 108")
for o in cari("bunyi Pasal 108 KUHAP laporan pengaduan lisan tertulis penyidik").get("organic", [])[:5]:
    print("  -", o.get("link"), "|", (o.get("snippet") or "")[:200])

print("\n=== UU 11/2008 Pasal 5 ayat (1)")
for o in cari("bunyi Pasal 5 ayat (1) UU 11 tahun 2008 informasi elektronik dokumen elektronik alat bukti hukum yang sah").get("organic", [])[:5]:
    print("  -", o.get("link"), "|", (o.get("snippet") or "")[:220])

print("\n=== UU 40/1999 Pasal 5 ayat (2) dan (3) hak jawab")
for o in cari("bunyi Pasal 5 ayat (2) ayat (3) UU 40 tahun 1999 pers hak jawab hak koreksi").get("organic", [])[:5]:
    print("  -", o.get("link"), "|", (o.get("snippet") or "")[:220])

print("\n=== status URL")
for u in ["https://www.tslaw.id/law-firm-surabaya/",
          "https://tslaw.id/law-firm-surabaya/",
          "https://www.tslaw.id/7-langkah-hukum-melaporkan-pencemaran-nama-baik-di-media-sosial/"]:
    st, t = html(u)
    print("  ", st, len(t), u)
