#!/usr/bin/env python3
"""TSLaw: konsolidasikan artikel kembar merek dagang — #3317 diarahkan ke #3208 (kanonik + noindex)."""
import base64, json, os, re, sys, time, urllib.request, urllib.error, importlib.util

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
spec = importlib.util.spec_from_file_location("cfg_tslaw", f"{WS}/cfg_tslaw.py")
m = importlib.util.module_from_spec(spec); spec.loader.exec_module(m)
DOM, AUTH = "www.tslaw.id", base64.b64encode(f'{m.CFG["user"]}:{m.CFG["pass"]}'.encode()).decode()
UA = {"User-Agent": "Mozilla/5.0"}
BACKUP = f"{WS}/tslaw_pemulihan/kembar"
os.makedirs(BACKUP, exist_ok=True)

PASANGAN = [(3317, 3208), (3226, 3219)]      # (yang diarahkan, tujuan)


def rest(p, 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}{p}", data=body, headers=h, method=method)
    for _ in range(3):
        try:
            with urllib.request.urlopen(r, timeout=180) as x:
                return x.status, json.loads(x.read())
        except urllib.error.HTTPError as e:
            return e.code, e.read().decode()[:250]
        except Exception:
            time.sleep(4)
    return 0, "gagal"


for sumber, tujuan in PASANGAN:
    st, d = rest(f"/wp-json/wp/v2/posts/{tujuan}?context=edit&_fields=id,slug,link,title")
    if not isinstance(d, dict):
        print(f"tujuan #{tujuan} gagal dibaca ({st})"); continue
    st, s = rest(f"/wp-json/wp/v2/posts/{sumber}?context=edit&_fields=id,slug,link,title,meta")
    if not isinstance(s, dict):
        print(f"sumber #{sumber} gagal dibaca ({st})"); continue
    print(f"\n■ #{sumber} /{s['slug']}")
    print(f"   diarahkan ke #{d['id']} /{d['slug']}  ({d['link']})")
    meta_lama = s.get("meta") or {}
    print(f"   kanonik sebelumnya : {meta_lama.get('_yoast_wpseo_canonical') or '(kosong)'}")
    print(f"   noindex sebelumnya : {meta_lama.get('_yoast_wpseo_meta-robots-noindex') or '(kosong)'}")

    if "--apply" not in sys.argv:
        continue

    st2, hasil = rest(f"/wp-json/wp/v2/posts/{sumber}", "POST", {"meta": {
        "_yoast_wpseo_canonical": d["link"],
        "_yoast_wpseo_meta-robots-noindex": "1"}})
    time.sleep(2)
    st3, cek = rest(f"/wp-json/wp/v2/posts/{sumber}?context=edit&_fields=meta")
    mm = (cek or {}).get("meta") or {}
    ok = str(mm.get("_yoast_wpseo_meta-robots-noindex")) == "1" and str(mm.get("_yoast_wpseo_canonical", "")).startswith("http")
    print(f"   tulis: {'✅ terpasang' if ok else '⚠️ gagal'} | kanonik: {mm.get('_yoast_wpseo_canonical')} | "
          f"noindex: {mm.get('_yoast_wpseo_meta-robots-noindex')}")

print("\n(dry run — pakai --apply untuk menulis)" if "--apply" not in sys.argv else "")
