#!/usr/bin/env python3
"""Bereskan /practice-areas/ di TSLaw: buat halaman pengalih ke /layanan/.

Cara: halaman baru berslug practice-areas berisi arahan pindah otomatis (meta refresh) + tautan terlihat,
lalu canonical-nya diarahkan ke /layanan/ lewat meta Yoast (XML-RPC). Ini bukan 301 sungguhan, tapi
menghentikan 404 dan mengarahkan pengunjung ke halaman yang benar tanpa perlu plugin tambahan.
"""
import base64, json, re, time, urllib.error, urllib.request
import xmlrpc.client

SITUS = "https://www.tslaw.id"
AUTH = base64.b64encode(b"bambangbot:EFKm EYGx VQCP Y9go ncPr uM2Y").decode()
H = {"Authorization": f"Basic {AUTH}", "User-Agent": "Mozilla/5.0", "Content-Type": "application/json"}
UA = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/124.0"}
TUJUAN = "https://www.tslaw.id/layanan/"

ISI = ('<meta http-equiv="refresh" content="0;url=' + TUJUAN + '">\n'
       '<p>Halaman <em>practice areas</em> sudah dipindahkan. Anda akan diarahkan otomatis ke '
       '<a href="' + TUJUAN + '">halaman layanan kami</a>.</p>\n'
       '<p>Kalau tidak berpindah sendiri, silakan klik tautan di atas untuk melihat daftar layanan '
       'Tito Suprianto Law Firm.</p>\n')


def rest(path, method="GET", data=None):
    body = json.dumps(data).encode() if data is not None else None
    r = urllib.request.Request(f"{SITUS}{path}", data=body, headers=H, method=method)
    for i in range(3):
        try:
            with urllib.request.urlopen(r, timeout=120) as x:
                return x.status, json.loads(x.read())
        except urllib.error.HTTPError as e:
            return e.code, e.read().decode()[:200]
        except Exception:
            time.sleep(4)
    return 0, "gagal"


st, d = rest("/wp-json/wp/v2/pages", "POST", {
    "title": "Layanan Kami",
    "slug": "practice-areas",
    "content": ISI,
    "status": "publish",
    "comment_status": "closed",
    "excerpt": "Halaman ini sudah dipindahkan ke halaman layanan."})
if not isinstance(d, dict) or "id" not in d:
    raise SystemExit(f"❌ gagal membuat halaman: {st} {str(d)[:200]}")
pid = d["id"]
print(f"halaman dibuat: #{pid} → {d.get('link')}")

# canonical lewat meta Yoast (XML-RPC, karena REST tidak menyimpan meta Yoast di situs ini)
try:
    p = xmlrpc.client.ServerProxy(f"{SITUS}/xmlrpc.php", allow_none=True)
    post = p.wp.getPost(0, "bambangbot", "EFKm EYGx VQCP Y9go ncPr uM2Y", pid)
    cf = [x for x in post.get("custom_fields", []) if x.get("key") not in
          ("_yoast_wpseo_canonical", "_yoast_wpseo_meta-robots-noindex")]
    cf.append({"key": "_yoast_wpseo_canonical", "value": TUJUAN})
    cf.append({"key": "_yoast_wpseo_meta-robots-noindex", "value": "1"})
    p.wp.editPost(0, "bambangbot", "EFKm EYGx VQCP Y9go ncPr uM2Y", pid, {"custom_fields": cf})
    print("   meta Yoast: canonical + noindex dikirim")
except Exception as e:
    print("   ⚠ meta Yoast gagal:", str(e)[:120])

time.sleep(3)
print("\n=== verifikasi ===")
for u in (f"{SITUS}/practice-areas/", TUJUAN, f"{SITUS}/practice-areas"):
    try:
        with urllib.request.urlopen(urllib.request.Request(u, headers=UA), timeout=45) as x:
            t = x.read().decode("utf-8", "replace")
            judul = re.search(r"<title>(.*?)</title>", t, re.S)
            canon = re.search(r'rel="canonical" href="([^"]+)"', t)
            refresh = "ada" if "http-equiv=\"refresh\"" in t else "tidak"
            robots = re.search(r"name='robots' content='([^']*)'", t)
            print(f"   {x.status} · canonical: {canon.group(1)[-40:] if canon else '-'} · "
                  f"pindah-otomatis: {refresh} · robots: {robots.group(1) if robots else '-'} · {u[-42:]}")
    except urllib.error.HTTPError as e:
        print(f"   {e.code} · {u[-42:]}")
