#!/usr/bin/env python3
"""TSLaw: cek judul di HTML live (bukan dari cache Yoast) dan tulis ulang meta beranda kalau perlu."""
import base64, re, time, urllib.request, urllib.error
from xml.sax.saxutils import escape

DOM = "tslaw.id"
USER, PASS = "bambangbot", "EFKm EYGx VQCP Y9go ncPr uM2Y"
AUTH = base64.b64encode(f"{USER}:{PASS}".encode()).decode()
UA = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124 Safari/537.36"}


def judul_live():
    r = urllib.request.urlopen(urllib.request.Request("https://www.tslaw.id/?cek=" + str(int(time.time())), headers=UA), timeout=120)
    h = r.read().decode("utf-8", "replace")
    t = re.search(r"<title>(.*?)</title>", h, re.S)
    d = re.search(r'<meta name="description" content="([^"]*)"', h)
    return (t.group(1) if t else "-"), (d.group(1) if d else "")


def rpc(method, params=()):
    def val(v):
        if isinstance(v, bool):
            return f"<value><boolean>{1 if v else 0}</boolean></value>"
        if isinstance(v, int):
            return f"<value><int>{v}</int></value>"
        if isinstance(v, list):
            return "<value><array><data>" + "".join(val(x) for x in v) + "</data></array></value>"
        if isinstance(v, dict):
            return "<value><struct>" + "".join(
                f"<member><name>{escape(str(k))}</name>{val(x)}</member>" for k, x in v.items()) + "</struct></value>"
        return f"<value><string>{escape(str(v))}</string></value>"
    body = ("<?xml version=\"1.0\"?><methodCall><methodName>" + method + "</methodName><params>" +
            "".join(f"<param>{val(p)}</param>" for p in params) + "</params></methodCall>").encode()
    r = urllib.request.Request(f"https://www.{DOM}/xmlrpc.php", data=body,
                               headers={"Content-Type": "text/xml", "User-Agent": "Mozilla/5.0",
                                        "Authorization": f"Basic {AUTH}"}, method="POST")
    try:
        with urllib.request.urlopen(r, timeout=150) as x:
            return x.status, x.read().decode("utf-8", "replace")
    except Exception as e:
        return 0, str(e)[:150]


print("=== sebelum ===")
t, d = judul_live()
print(f"   judul: {t}")
print(f"   meta : ({len(d)} char) {d[:100]}")

print("\n=== tulis ulang meta beranda ===")
CF = [{"key": "_yoast_wpseo_title", "value": "Law Firm Surabaya | Tito Suprianto Law Firm"},
      {"key": "_yoast_wpseo_metadesc", "value": "Law firm Surabaya untuk sengketa tanah, kontrak bisnis, merek dagang, dan legalitas usaha. Konsultasi gratis bersama advokat Tito Suprianto Law Firm."},
      {"key": "_yoast_wpseo_focuskw", "value": "law firm surabaya"}]
st, isi = rpc("wp.editPost", [1, USER, PASS, 833, {"custom_fields": CF}])
print(f"   HTTP {st} | {'tersimpan' if '<boolean>1</boolean>' in isi else isi[:200]}")

print("\n=== sesudah (baca HTML live, tunggu 5 detik) ===")
time.sleep(5)
t2, d2 = judul_live()
print(f"   judul: {t2}")
print(f"   meta : ({len(d2)} char) {d2[:100]}")

print("\n=== baca balik nilai meta lewat XML-RPC ===")
st, isi = rpc("wp.getPost", [1, USER, PASS, 833])
for k in ("_yoast_wpseo_title", "_yoast_wpseo_metadesc", "_yoast_wpseo_focuskw"):
    m = re.search(rf"<member><name>{k}</name><value><string>([^<]*)</string>", isi)
    print(f"   {k:<26} {m.group(1)[:90] if m else '(tidak terbaca)'}")
