#!/usr/bin/env python3
"""Buat daftar pasangan URL lama → URL baru (42 artikel) + status pengalihannya, untuk dicek Bos."""
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"}
LAMA = json.load(open(f"{WS}/drafts/tsc_slug_lama.json"))


class TanpaAlih(urllib.request.HTTPRedirectHandler):
    def redirect_request(self, *a, **k):
        return None


OP = urllib.request.build_opener(TanpaAlih)


def cek(url):
    try:
        with OP.open(urllib.request.Request(url, headers=UA), timeout=45) as x:
            return x.status, ""
    except urllib.error.HTTPError as e:
        return e.code, e.headers.get("Location", "")
    except Exception as e:
        return "GAGAL", str(e)[:40]


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=90) as x:
                return json.loads(x.read())
        except Exception:
            time.sleep(3)
    return {}


pasangan = []
for x in LAMA:
    o = rest(f"/wp-json/wp/v2/posts/{x['id']}?_fields=id,slug,link")
    if not isinstance(o, dict):
        continue
    st, loc = cek(x["link"])
    pasangan.append({"id": x["id"], "lama": x["link"], "baru": o["link"], "status": st,
                     "tujuan": loc})

ok = [p for p in pasangan if p["status"] == 301 and p["tujuan"].rstrip("/") == p["baru"].rstrip("/")]
print(f"diperiksa: {len(pasangan)} · 301 benar: {len(ok)}\n")
for p in pasangan[:8]:
    print(f"  LAMA : {p['lama']}")
    print(f"  BARU : {p['baru']}")
    print(f"  status {p['status']} → {p['tujuan'][:80]}\n")

json.dump(pasangan, open(f"{WS}/drafts/tsc_pasangan_url.json", "w"), ensure_ascii=False, indent=1)
with open(f"{WS}/drafts/tsc_pasangan_url.md", "w") as f:
    f.write("# TSC — pasangan URL lama dan baru (slug berganti nama, 7 Okt 2026)\n\n")
    f.write(f"Diperiksa {len(pasangan)} artikel. Yang balas 301 dengan tujuan benar: **{len(ok)}**.\n\n")
    f.write("| # | URL lama | URL baru | Status |\n|---|---|---|---|\n")
    for i, p in enumerate(pasangan, 1):
        f.write(f"| {i} | {p['lama']} | {p['baru']} | {p['status']} |\n")
print("→ drafts/tsc_pasangan_url.md + .json")
