#!/usr/bin/env python3
"""Verifikasi #3179: baca ulang dari REST + periksa halaman publik."""
import base64, json, re, time, urllib.error, urllib.request, importlib.util

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
DIR = f"{WS}/tslaw_pemulihan/perbaikan_20261012"
PID = 3179
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)
AUTH = base64.b64encode(f'{m.CFG["user"]}:{m.CFG["pass"]}'.encode()).decode()
UA = {"User-Agent": "Mozilla/5.0"}


def rest(p):
    r = urllib.request.Request(f"https://www.tslaw.id{p}", headers={"Authorization": f"Basic {AUTH}", **UA})
    with urllib.request.urlopen(r, timeout=180) as x:
        return json.loads(x.read())


def teks(html):
    t = re.sub(r"<script.*?</script>", " ", html, flags=re.S | re.I)
    return re.sub(r"\s+", " ", re.sub(r"<[^>]+>", " ", t)).strip()


SESUDAH_KIRIM = open(f"{DIR}/post_3179_SESUDAH_dryrun.html").read()
LAMA = json.load(open(f"{DIR}/post_3179_SEBELUM.json"))
d = rest(f"/wp-json/wp/v2/posts/{PID}?context=edit")
raw = d["content"]["raw"]
open(f"{DIR}/post_3179_SESUDAH.html", "w").write(raw)

meta = d.get("meta") or {}
h2 = [re.sub(r"<[^>]+>", "", x).strip() for x in re.findall(r"<h2[^>]*>(.*?)</h2>", raw, re.S)]
faq = re.search(r"<script type=\"application/ld\+json\">(.*?)</script>", raw, re.S)
faq_jml = len(json.loads(faq.group(1))["mainEntity"]) if faq else 0
v = {
    "id": d["id"], "slug": d["slug"], "status": d["status"], "modified": d["modified"],
    "judul_sama": d["title"]["raw"] == LAMA["title"]["raw"],
    "judul": d["title"]["raw"],
    "meta_sama": all((d.get("meta") or {}).get(k) == (LAMA.get("meta") or {}).get(k)
                     for k in ["_yoast_wpseo_title", "_yoast_wpseo_metadesc", "_yoast_wpseo_focuskw"]),
    "yoast_title": meta.get("_yoast_wpseo_title"), "yoast_desc": meta.get("_yoast_wpseo_metadesc"),
    "fokus": meta.get("_yoast_wpseo_focuskw"),
    "isi_identik_dengan_yang_dikirim": teks(raw) == teks(SESUDAH_KIRIM),
    "kata_tanpa_skema": len(teks(raw).split()),
    "kata_metrik_audit": len(teks(raw).split()) + len(teks(faq.group(0)).split() if faq else "".split()),
    "h2": h2, "h3_jml": len(re.findall(r"<h3", raw)),
    "faq_tampil": len(re.findall(r"<h3[^>]*>(?:Berapa|Apakah|Bisakah|Apa )", raw)),
    "faq_schema_item": faq_jml,
    "tombol_wa": len(re.findall(r"wa\.me", raw)),
    "paragraf_rusak": len(re.findall(r"<p[^>]*>[^<]*<p", raw)),
    "tautan_alamat_lama": re.findall(r"tslaw\.id/[a-z0-9-]+/(?=[^a-z0-9-])", raw),
    "kata_kata_hilang": [],
}
for s in ["Tapi masih banyak pelaku usaha", "Pemilihan bentuk badan usaha memengaruhi", "hak veto atau prioritas dividen",
          "KTP dan NPWP para pendiri", "SABH", "Mendirikan PT tidak perlu rumit"]:
    if s not in teks(raw):
        v["kata_kata_hilang"].append(s)

# ---- halaman publik ----
try:
    req = urllib.request.Request(f"https://www.tslaw.id/{d['slug']}.htm?nocache={int(time.time())}", headers=UA)
    with urllib.request.urlopen(req, timeout=120) as x:
        live_status, live = x.status, x.read().decode("utf-8", "ignore")
except urllib.error.HTTPError as e:
    live_status, live = e.code, ""
v["live"] = {
    "status": live_status,
    "panjang": len(live),
    "h2_baru_tampil": [h for h in ["Dasar Hukum Pendirian PT di Indonesia", "Syarat Pendirian PT Sebelum ke Notaris",
                                   "Kewajiban Setelah PT Berdiri yang Sering Dilupakan", "PT Perorangan: Mendirikan PT dengan Satu Orang"]
                       if h in live],
    "schema_faqpage": "FAQPage" in live,
    "tombol_wa_6281909222026": live.count("wa.me/6281909222026"),
    "tautan_htm_hidup": len(re.findall(r"tslaw\.id/[a-z0-9-]+\.htm", live)),
    "sisa_alamat_lama": re.findall(r"tslaw\.id/[a-z0-9-]+/(?=[\"'])", live)[:5],
    "judul_h1": (re.search(r"<h1[^>]*>(.*?)</h1>", live, re.S).group(1).strip() if re.search(r"<h1[^>]*>(.*?)</h1>", live, re.S) else None),
}
json.dump(v, open(f"{DIR}/post_3179_VERIFIKASI.json", "w"), ensure_ascii=False, indent=1)
print(json.dumps(v, ensure_ascii=False, indent=1)[:2600])
