#!/usr/bin/env python3
"""DAS: verifikasi perubahan beranda (Site Title, tagline, judul SEO, meta, H1)."""
import base64, html, json, re, time, urllib.request, importlib.util
from xml.sax.saxutils import escape

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
spec = importlib.util.spec_from_file_location("cfg_das", f"{WS}/cfg_das.py")
m = importlib.util.module_from_spec(spec); spec.loader.exec_module(m)
CFG = m.CFG
DOM = CFG["domain"]
USER, PASS = CFG["user"], CFG["pass"]
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"}

h = urllib.request.urlopen(urllib.request.Request(f"https://{DOM}/?cek={int(time.time())}", headers=UA), timeout=90).read().decode("utf-8", "replace")
print("=== 1. elemen yang dibaca Google ===")
for pola, nama in ((r"<title>(.*?)</title>", "judul"), (r'<meta name="description" content="([^"]*)"', "meta desc"),
                   (r'<meta property="og:site_name" content="([^"]*)"', "og:site_name"),
                   (r'<link rel="canonical" href="([^"]*)"', "canonical"),
                   (r'<meta name="robots" content="([^"]*)"', "robots")):
    mm = re.search(pola, h, re.S)
    nilai = html.unescape(mm.group(1)).strip() if mm else "(tidak ada)"
    print(f"   {nama:<12}: {nilai[:120]}{'  (' + str(len(nilai)) + ' char)' if nama in ('judul','meta desc') else ''}")

print("\n=== 2. struktur heading ===")
h1 = [html.unescape(re.sub(r"<[^>]+>", "", x)).strip()[:90] for x in re.findall(r"<h1[^>]*>(.*?)</h1>", h, re.S)]
h2 = [html.unescape(re.sub(r"<[^>]+>", "", x)).strip()[:60] for x in re.findall(r"<h2[^>]*>(.*?)</h2>", h, re.S)]
print(f"   H1 ({len(h1)}): {h1}")
print(f"   H2 ({len(h2)}): {h2[:8]}")

print("\n=== 3. meta Yoast + Site Title ===")
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://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.read().decode("utf-8", "replace")
    except Exception as e:
        return f"ERR {str(e)[:80]}"

isi = rpc("wp.getOptions", [1, USER, PASS, ["blog_title", "blogdescription"]])
for kunci in ("blog_title", "blogdescription"):
    mm = re.search(r"<name>" + kunci + r"</name>.*?<name>value</name><value><string>(.*?)</string>", isi, re.S)
    print(f"   {kunci:<16}: {html.unescape(mm.group(1)) if mm else '(tidak terbaca)'}")

for pid in (424, 3991):
    isi = rpc("wp.getPost", [1, USER, PASS, pid])
    judul = re.search(r"<name>post_title</name><value><string>([^<]*)</string>", isi)
    print(f"\n   halaman #{pid} judul: {html.unescape(judul.group(1)) if judul else '?'}")
    for kunci in ("_yoast_wpseo_focuskw", "_yoast_wpseo_title", "_yoast_wpseo_metadesc"):
        mm = re.search(r"<member><name>key</name><value><string>" + re.escape(kunci) +
                       r"</string></value></member>\s*<member><name>value</name><value><string>(.*?)</string>", isi, re.S)
        nilai = html.unescape(mm.group(1)) if mm else "(belum diisi)"
        print(f"      {kunci:<24} {nilai[:110]}")
