#!/usr/bin/env python3
"""Perbaikan tautan mati /practice-areas/ (404) -> /layanan/ di empat draft listikel TSLaw.
Halaman layanan tslaw.id adalah /layanan/ (id 12). Ubah satu per satu, verifikasi baca ulang."""
import base64, json, os, re, time, urllib.request, urllib.error

DOM = "tslaw.id"
AUTH = base64.b64encode(b"bambangbot:EFKm EYGx VQCP Y9go ncPr uM2Y").decode()
UA = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124 Safari/537.36"}
OUT = "/home/mantapman/.hermes/profiles/atun/workspace/tslaw_listikel"
SALINAN = {3532: "artikel3.html", 3557: "artikel4.html", 3653: "artikel5.html", 3657: "artikel6.html"}
BURUK = "https://www.tslaw.id/practice-areas/"
BAGUS = "https://www.tslaw.id/layanan/"


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(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()[:200]
        except Exception as e:
            print(f"    (ulang {i+1}: {str(e)[:60]})")
            time.sleep(8)
    return 0, "gagal"


for pid, salinan in SALINAN.items():
    st, c = rest(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=id,slug,status,content")
    if not isinstance(c, dict):
        print(f"  #{pid}: gagal baca ({st}) {c}")
        continue
    raw = c["content"]["raw"]
    if BURUK not in raw:
        print(f"  #{pid} /{c['slug']}/: tidak ada tautan rusak, dilewati")
        continue
    baru = raw.replace(BURUK, BAGUS)
    st, u = rest(f"/wp-json/wp/v2/posts/{pid}", "POST", {"content": baru})
    st2, v = rest(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=slug,status,content")
    vraw = v["content"]["raw"] if isinstance(v, dict) else ""
    print(f"  #{pid} /{c['slug']}/ -> POST {st} | sisa tautan rusak: {vraw.count('practice-areas')} | "
          f"tautan /layanan/: {vraw.count('/layanan/')} | status {v.get('status') if isinstance(v, dict) else '?'}")
    p = f"{OUT}/{salinan}"
    if os.path.exists(p):
        open(p, "w").write(vraw)
        print(f"      salinan lokal diperbarui: {p}")
