#!/usr/bin/env python3
"""Daftar lengkap penyebutan 'Klinik DNI' di konten TSC, dikelompokkan menurut jenis temuan."""
import base64, importlib.util, json, re, time, urllib.error, urllib.request

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
spec = importlib.util.spec_from_file_location("cfg", f"{WS}/cfg_tsc.py")
m = importlib.util.module_from_spec(spec)
spec.loader.exec_module(m)
CFG = m.CFG
DOM = CFG["domain"]
AUTH = base64.b64encode(f"{CFG['user']}:{CFG['pass']}".encode()).decode()
UA = {"User-Agent": "Mozilla/5.0"}
POLA = re.compile(r"klinik[\s_-]*dni[\s_-]*krian|klinik[\s_-]*dni[\s_-]*sidoarjo|klinik[\s_-]*dni", re.I)


def rest(path):
    h = {"Authorization": f"Basic {AUTH}", **UA}
    r = urllib.request.Request(f"https://{DOM}{path}", headers=h)
    for _ in range(3):
        try:
            with urllib.request.urlopen(r, timeout=180) as x:
                return json.loads(x.read())
        except urllib.error.HTTPError as e:
            return {"err": e.code}
        except Exception:
            time.sleep(4)
    return {}


baris = []
for jenis in ("posts", "pages"):
    page = 1
    while True:
        d = rest(f"/wp-json/wp/v2/{jenis}?per_page=100&page={page}&status=publish&context=edit"
                 f"&_fields=id,slug,link,title,content")
        if not isinstance(d, list) or not d:
            break
        for x in d:
            isi = x["content"]["raw"]
            judul = re.sub(r"<[^>]+>", "", str(x["title"]["raw"]))
            slug = x["slug"]
            teks = re.sub(r"<[^>]+>", " ", isi)
            temuan = {}
            n_judul = len(POLA.findall(judul))
            if n_judul:
                temuan["judul"] = n_judul
            if POLA.search(slug.replace("-", " ")) or "klinik-dni" in slug:
                temuan["slug"] = 1
            n_teks = len(POLA.findall(teks))
            if n_teks:
                temuan["teks terlihat"] = n_teks
            n_url = len(re.findall(r"klinikdni(?:sidoarjo|krian)\.com", isi, re.I))
            if n_url:
                temuan["url lama (data media/tombol)"] = n_url
            n_tag = len(re.findall(r"#klinikdni\w*", isi, re.I))
            if n_tag:
                temuan["tagar/akun"] = n_tag
            if temuan:
                baris.append({"jenis": jenis, "id": x["id"], "link": x["link"], "judul": judul[:90],
                              "temuan": temuan})
        if len(d) < 100:
            break
        page += 1

total = {}
for b in baris:
    for k, v in b["temuan"].items():
        total[k] = total.get(k, 0) + v

print(f"konten yang menyebut Klinik DNI: {len(baris)}\n")
print("rekap:")
for k, v in sorted(total.items(), key=lambda x: -x[1]):
    print(f"  {k:<26} {v} kemunculan")
print("\nrincian (10 teratas menurut jumlah temuan):")
for b in sorted(baris, key=lambda x: -sum(x["temuan"].values()))[:10]:
    print(f"  #{b['id']:<6} {b['temuan']} | {b['judul'][:60]}")

with open(f"{WS}/drafts/tsc_daftar_klinik_dni.md", "w") as f:
    f.write("# TSC — daftar lengkap penyebutan \"Klinik DNI\" (7 Okt 2026)\n\n")
    f.write(f"Total konten: {len(baris)}. Rekap: " + ", ".join(f"{k} {v}" for k, v in total.items()) + "\n\n")
    for b in sorted(baris, key=lambda x: -sum(x["temuan"].values())):
        f.write(f"## {b['judul']}\n\n")
        f.write(f"- {b['link']}\n- temuan: {b['temuan']} (`{b['jenis']} #{b['id']}`)\n\n")
json.dump(baris, open(f"{WS}/drafts/tsc_daftar_klinik_dni.json", "w"), ensure_ascii=False, indent=1)
print("\n→ drafts/tsc_daftar_klinik_dni.md + .json")
