#!/usr/bin/env python3
"""TSC — kelompokkan halaman per topik (bukan per kueri utama), lalu tentukan kanonik dan kandidat rapikan.

Fokus: halaman yang tayangannya nol TAPI topiknya sudah diwakili halaman lain = duplikasi yang
merugikan kualitas. Halaman seperti ini paling aman dirapikan lebih dulu.
"""
import json, re
from collections import defaultdict

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
data = json.load(open(f"{WS}/drafts/tsc_peta_konten.json")) if False else None

# ambil ulang dari klaster.json (berisi konten + GSC per halaman)
klaster = json.load(open(f"{WS}/drafts/tsc_klaster.json"))
halaman = {}
for k in klaster:
    for y in [k["kanonik"]] + k["lain"]:
        halaman[y["url"]] = y

TOPIK = [
    ("jerawat", ["jerawat"]),
    ("bekas jerawat & flek", ["bekas-jerawat", "flek", "microneedling", "dermapen"]),
    ("klinik kecantikan krian", ["klinik-kecantikan", "kecantikan-krian", "klinik-estetika"]),
    ("dokter kulit krian", ["dokter-kulit-krian", "kulit-kelamin-krian", "krian-dokter"]),
    ("dokter kulit sidoarjo", ["sidoarjo-dokter", "dokter-kulit-sidoarjo", "dokter-spesialis-kulit-sidoarjo"]),
    ("kulit & kelamin (PMS, kutil, sifilis, herpes)", ["pms", "kelamin", "sifilis", "herpes", "kutil"]),
    ("facial & perawatan wajah", ["facial", "perawatan-wajah", "wajah"]),
    ("anti aging, botox, filler, prp", ["anti-aging", "botox", "filler", "prp", "rejuvenation"]),
    ("kulit berminyak & berjerawat", ["berminyak", "berjerawat"]),
    ("eksim, alergi, gatal", ["eksim", "alergi", "gatal", "dermatitis"]),
    ("kulit cantik & skin barrier", ["skin-barrier", "kulit-cantik", "melembapkan", "kenyal"]),
    ("dokter & klinik (umum)", ["dokter-kulit", "klinik-kulit", "klinik-dni", "the-skin-code-clinic"]),
]

grup = defaultdict(list)
for url, y in halaman.items():
    teks = (y["slug"] + " " + y["judul"]).lower()
    for nama, kunci in TOPIK:
        if any(k in teks for k in kunci):
            grup[nama].append(y)
            break

print("=== peta topik ===")
rencana = []
for nama, isi in sorted(grup.items(), key=lambda x: -len(x[1])):
    isi.sort(key=lambda y: (-y["klik"], -y["tayang"], -y["kata"]))
    nol = [y for y in isi if y["tayang"] == 0]
    print(f"\n■ {nama}: {len(isi)} halaman · {len(nol)} tanpa tayangan")
    for i, y in enumerate(isi[:6]):
        tanda = "KANONIK" if i == 0 else ("  nol  " if y["tayang"] == 0 else "gabung ")
        print(f"   {tanda} {y['tayang']:>4} tayang | {y['klik']:>2} klik | {y['kata']:>5} kata | /{y['slug'][:52]}")
    if len(isi) > 6:
        print(f"   … {len(isi) - 6} halaman lain")
    rencana.append({"topik": nama, "kanonik": isi[0], "kandidat": isi[1:]})

json.dump(rencana, open(f"{WS}/drafts/tsc_rencana_rapi.json", "w"), ensure_ascii=False, indent=1)

nol_total = [y for r in rencana for y in r["kandidat"] if y["tayang"] == 0]
print(f"\ntotal halaman tanpa tayangan yang punya kanonik sejenis: {len(nol_total)}")
for y in sorted(nol_total, key=lambda z: -z["kata"])[:15]:
    print(f"   {y['kata']:>5} kata | #{y['id']:<5} | /{y['slug'][:60]}")
