#!/usr/bin/env python3
"""Ganti nama tag TSC yang masih memakai merek lama + hapus tag rusak.

ID tag diambil dari halaman arsip tag (tautan REST di <head>), karena endpoint daftar tag diblokir.
Pakai --go untuk menjalankan.
"""
import base64, importlib.util, json, re, sys, 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"}

# tag lama yang diketahui dari sitemap + temuan sebelumnya
SLUG = ["klinik-dni", "klinik-dni-krian", "klinik-dni-krian-sidoarjo", "klinik-dni-sidoarjo",
        "dni-krian", "spesialis-kandungan-klinik-dni", "dokter-kulit-dan-kelamin-klinik-dni-krian",
        "berikut-contoh-tags-dengan-pemisah-koma-untuk-artikel-klinik-dni-krian-sidoarjo-klinik-dni-krian-sidoarjo"]


def rest(path, method="GET", data=None):
    h = {"Authorization": f"Basic {AUTH}", **UA}
    body = None
    if data is not None:
        body = json.dumps(data).encode()
        h["Content-Type"] = "application/json"
    r = urllib.request.Request(f"https://{DOM}{path}", data=body, headers=h, method=method)
    for i in range(4):
        try:
            with urllib.request.urlopen(r, timeout=90) as x:
                return x.status, json.loads(x.read())
        except urllib.error.HTTPError as e:
            if e.code in (429, 404):
                time.sleep(5 * (i + 1))
                continue
            return e.code, e.read().decode()[:150]
        except Exception:
            time.sleep(4)
    return 0, "gagal"


def usul(nama):
    n = nama
    n = re.sub(r"klinik\s*dni\s*krian\s*sidoarjo", "The Skin Code Clinic Krian Sidoarjo", n, flags=re.I)
    n = re.sub(r"klinik\s*dni\s*krian", "The Skin Code Clinic Krian", n, flags=re.I)
    n = re.sub(r"klinik\s*dni\s*sidoarjo", "The Skin Code Clinic Sidoarjo", n, flags=re.I)
    n = re.sub(r"klinik\s*dni", "The Skin Code Clinic", n, flags=re.I)
    n = re.sub(r"\bDNI\s+Krian\b", "The Skin Code Clinic", n, flags=re.I)
    n = re.sub(r"\bDNI\b", "The Skin Code Clinic", n, flags=re.I)
    return re.sub(r"\s{2,}", " ", n).strip()


rencana = []
for slug in SLUG:
    st, d = rest(f"/wp-json/wp/v2/tags?slug={slug}&_fields=id,name,slug,count")
    if not isinstance(d, list) or not d:
        print(f"  /tag/{slug}/ → tidak ditemukan (HTTP {st})")
        continue
    t = d[0]
    rusak = slug.count("berikut-contoh") > 0 or len(slug) > 60
    baru = None if rusak else usul(t["name"])
    rencana.append({"slug": slug, "id": t["id"], "artikel": t.get("count"),
                    "aksi": "hapus" if rusak else "ganti", "baru": baru or ""})
    print(f"  /tag/{slug}/ · {t.get('count')} artikel · \"{t['name'][:52]}\"")
    print(f"     → {rencana[-1]['aksi'].upper()}: {rencana[-1]['baru'] or '(dihapus)'}")
    time.sleep(1)

json.dump(rencana, open(f"{WS}/drafts/tsc_tag_rencana.json", "w"), ensure_ascii=False, indent=1)
if "--go" not in sys.argv:
    print("\n(dry run — pakai --go)")
    sys.exit(0)

for r in rencana:
    if not r["id"]:
        continue
    if r["aksi"] == "hapus":
        st, _ = rest(f"/wp-json/wp/v2/tags/{r['id']}?force=true", "DELETE")
        print(f"  hapus #{r['id']} ({r['slug'][:40]}) → HTTP {st}")
    else:
        st, d = rest(f"/wp-json/wp/v2/tags/{r['id']}", "POST", {"name": r["baru"]})
        print(f"  ganti #{r['id']} → «{r['baru']}» HTTP {st} slug={(d or {}).get('slug') if isinstance(d, dict) else '?'}")
    time.sleep(1.5)
