#!/usr/bin/env python3
"""Pemulihan TSLaw: kembalikan konten /hubungi/ (page 10) dari revisi #3413, lewat REST (bukan XML-RPC)."""
import base64, json, 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"}


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


print("=== 1. baca revisi #3413 (page 10) ===")
st, rev = rest("/wp-json/wp/v2/pages/10/revisions/3413?context=edit&_fields=id,modified,content,title")
raw = rev.get("content", {}).get("raw", "") if isinstance(rev, dict) else ""
print(f"   HTTP {st} | diubah: {rev.get('modified') if isinstance(rev, dict) else '?'}")
print(f"   panjang konten: {len(raw)} karakter")
print(f"   memuat blok spectra: {raw.count('<!-- wp:spectra')} | sureforms: {'ada' if 'sureforms' in raw else 'tidak'}")
print(f"   cuplikan: {raw[:180]!r}")

if len(raw) < 1000:
    print("\n   ⚠️ revisi ini terlalu pendek — bukan konten aslinya. Berhenti.")
    raise SystemExit(0)

print("\n=== 2. kembalikan ke halaman 10 lewat REST ===")
st, res = rest("/wp-json/wp/v2/pages/10", "POST", {"content": raw})
print(f"   HTTP {st} | {str(res)[:120]}")

print("\n=== 3. verifikasi ===")
st, cur = rest("/wp-json/wp/v2/pages/10?context=edit&_fields=content")
now = cur.get("content", {}).get("raw", "") if isinstance(cur, dict) else ""
print(f"   konten sekarang: {len(now)} karakter | sama dengan revisi: {'YA' if now == raw else 'TIDAK'}")
