#!/usr/bin/env python3
"""Cek fakta tahap 4: perpanjangan, alur DJKI, Pasal 3 first-to-file, jangka waktu paten."""
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"})
    with urllib.request.urlopen(req, timeout=60) as r:
        return json.load(r)


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 cuplik(t, pat, lebar=600, n=2, sebelum=150):
    ada = False
    for m in list(re.finditer(pat, t, re.I))[:n]:
        ada = True
        print(f"   [{pat}] ...{t[max(0,m.start()-sebelum):m.start()+lebar]}...\n")
    return ada


print("=== perpanjangan merek (klinik)")
t = html("https://www.hukumonline.com/klinik/a/bisakah-orang-lain-menggunakan-merek-terdaftar-jika-tak-diperpanjang-lt664070153fded/")
cuplik(t, r"perpanjangan", 700, 2)

print("\n=== alur pemeriksaan (hukumonline berita)")
t = html("https://www.hukumonline.com/berita/a/begini-mekanisme-pemeriksaan-merek-dalam-proses-pendaftaran-merek-lt642d4b0f1b4de/")
print("  len", len(t))
if len(t) > 2000:
    cuplik(t, r"150", 700, 1)
    cuplik(t, r"pengumuman", 700, 1)

print("\n=== Pasal 3 first to file")
for o in cari("Pasal 3 ayat (1) UU 20 tahun 2016 hak atas merek diperoleh setelah merek tersebut terdaftar").get("organic", [])[:6]:
    print("  -", o.get("link"), "|", (o.get("snippet") or "")[:160])

print("\n=== jangka waktu paten")
for o in cari("jangka waktu paten 20 tahun paten sederhana 10 tahun pasal 22 pasal 23 UU 13/2016").get("organic", [])[:6]:
    print("  -", o.get("link"), "|", (o.get("snippet") or "")[:180])
