#!/usr/bin/env python3
"""Kembalikan slug arsip tag ke bentuk semula supaya tidak ada URL baru yang 404.

Alasan: WordPress TIDAK mengalihkan arsip tag saat slug-nya berubah (terbukti: URL lama balas 404),
sedangkan untuk artikel pengalihannya otomatis. Nama tag tetap memakai nama baru; yang dikembalikan
hanya alamatnya, sampai plugin Redirection dipasang.

Pakai --go untuk menjalankan.
"""
import base64, importlib.util, json, 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"}

KEMBALI = [(88, "klinik-dni-krian"), (471, "klinik-dni-krian-sidoarjo"), (154, "klinik-dni-sidoarjo"),
           (416, "spesialis-kandungan-klinik-dni"), (436, "dokter-kulit-dan-kelamin-klinik-dni-krian")]


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()[:200]
        except Exception:
            time.sleep(4)
    return 0, "gagal"


go = "--go" in sys.argv
for tid, slug_lama in KEMBALI:
    st, t = rest(f"/wp-json/wp/v2/tags/{tid}?_fields=id,name,slug,count,link")
    if not isinstance(t, dict):
        print(f"  #{tid} gagal dibaca")
        continue
    print(f"  #{tid} «{t['name'][:44]}» slug {t['slug']} → {slug_lama}")
    if go:
        st2, d = rest(f"/wp-json/wp/v2/tags/{tid}", "POST", {"slug": slug_lama})
        print(f"     HTTP {st2} · slug sekarang {(d or {}).get('slug') if isinstance(d, dict) else '?'}")
    time.sleep(1.2)

print("\ncek URL arsip tag:")
for slug in ["klinik-dni", "klinik-dni-krian", "klinik-dni-sidoarjo", "the-skin-code-clinic-krian",
             "dni-krian"]:
    try:
        with urllib.request.urlopen(urllib.request.Request(f"https://www.{DOM}/tag/{slug}/", headers=UA),
                                    timeout=45) as x:
            print(f"   HTTP {x.status} · /tag/{slug}/")
    except urllib.error.HTTPError as e:
        print(f"   HTTP {e.code} · /tag/{slug}/")
    except Exception as e:
        print(f"   GAGAL {str(e)[:40]} · /tag/{slug}/")
    time.sleep(1)
if not go:
    print("\n(dry run — pakai --go)")
