#!/usr/bin/env python3
"""TSLaw: pelajari standar artikel yang ada + baca meta halaman /layanan/ (untuk redirect slug lama)."""
import base64, html, json, re, urllib.request, urllib.error, importlib.util
from xml.sax.saxutils import escape

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)
CFG = m.CFG
DOM, USER, PASS = "www.tslaw.id", CFG["user"], CFG["pass"]
AUTH = base64.b64encode(f"{USER}:{PASS}".encode()).decode()
UA = {"User-Agent": "Mozilla/5.0"}


def rpc(method, params=()):
    def val(v):
        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://{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.read().decode("utf-8", "replace")
    except Exception as e:
        return f"ERR {str(e)[:100]}"


print("=== struktur satu artikel contoh (#3067) ===")
isi = rpc("wp.getPost", [1, USER, PASS, 3067])
if "faultString" in isi:
    print("   gagal:", re.search(r"<name>faultString</name><value><string>(.*?)</string>", isi, re.S).group(1)[:100])
else:
    isi_bersih = isi
    judul = re.search(r"<name>post_title</name><value><string>(.*?)</string>", isi_bersih, re.S)
    konten = re.search(r"<name>post_content</name><value><string>(.*?)</string>\s*</value>", isi_bersih, re.S)
    print("   judul:", html.unescape(judul.group(1))[:90] if judul else "-")
    if konten:
        c = html.unescape(konten.group(1))
        print(f"   panjang konten: {len(c)}")
        print("   sub-judul:", [html.unescape(re.sub("<[^>]+>", "", x))[:60] for x in re.findall(r"<h[23][^>]*>.*?</h[23]>", c)][:8])
        print("   tautan WA:", re.findall(r"https?://[^\"'\s>]*(?:wa\.me|whatsapp)[^\"'\s>]*", c)[:2])
        print("   ada skema JSON-LD:", "application/ld+json" in c)
        print("   160 karakter awal:", re.sub(r"\s+", " ", c[:200]))

print("\n=== meta halaman #12 (/layanan/) ===")
isi = rpc("wp.getPost", [1, USER, PASS, 12])
if "faultString" in isi:
    print("   gagal:", re.search(r"<name>faultString</name><value><string>(.*?)</string>", isi, re.S).group(1)[:120])
else:
    fields = re.findall(r"<member><name>key</name><value><string>(_[^<]+)</string></value></member>\s*"
                        r"<member><name>value</name><value><string>(.*?)</string>", isi, re.S)
    print(f"   jumlah meta: {len(fields)}")
    for k, v in fields[:25]:
        print(f"      {k:<42} {html.unescape(v)[:60]}")
    print("   slug sekarang:", re.search(r"<name>post_name</name><value><string>([^<]*)</string>", isi).group(1))
    print("   ada _wp_old_slug:", any(k == "_wp_old_slug" for k, _ in fields))
