#!/usr/bin/env python3
"""TSLaw: perbarui isi artikel #3532 (draft) dengan versi yang placeholder entri-nya sudah terisi.
Dipakai setelah ditemukan bug: ISI sempat bukan f-string sehingga entri tampil sebagai {ENTRI[0][0]}. REST JSON."""
import base64, json, os, re, sys, time, urllib.request, urllib.error

sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from tslaw_listikel_3 import A3

DOM = "tslaw.id"
AUTH = base64.b64encode(b"bambangbot:EFKm EYGx VQCP Y9go ncPr uM2Y").decode()
UA = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/124 Safari/537.36"}
PID = 3532
SALINAN = "/home/mantapman/.hermes/profiles/atun/workspace/tslaw_listikel/artikel3.html"


def rest(path, method="GET", data=None):
    h = {"Authorization": f"Basic {AUTH}", **UA}
    body = None
    if data is not None:
        body = json.dumps(data).encode()
        h["Content-Type"] = "application/json"
    r = urllib.request.Request(f"https://{DOM}{path}", data=body, headers=h, method=method)
    for i in range(4):
        try:
            with urllib.request.urlopen(r, timeout=180) as x:
                return x.status, json.loads(x.read())
        except urllib.error.HTTPError as e:
            return e.code, e.read().decode()[:300]
        except Exception as e:
            print(f"    (ulang {i+1}: {str(e)[:60]})")
            time.sleep(8)
    return 0, "gagal"


def kata(html):
    teks = re.sub(r"<(script|style)[^>]*>.*?</\1>", " ", html, flags=re.S | re.I)
    return len([w for w in re.split(r"\s+", re.sub(r"<[^>]+>", " ", teks)) if w])


isi = A3["isi"]
sisa = re.findall(r"\{[A-Za-z_\[\]0-9]+\}", isi)
assert not sisa, f"masih ada placeholder: {sisa[:5]}"
assert os.path.getsize(SALINAN) > 15000, "salinan lokal terlihat belum diperbarui"
print(f"salinan lokal : {SALINAN} ({os.path.getsize(SALINAN)} byte) | {kata(isi)} kata")
print(f"entri 1       : {re.findall(r'<h3>(.{0,55})', isi)[0]}")
print(f"beranda entri1: {'ya' if 'beranda TS Law</a>' in isi else 'TIDAK'}")

if "--apply" not in sys.argv:
    print("\n(dry run — pakai --apply untuk memperbarui #3532)")
    raise SystemExit(0)

st, r = rest(f"/wp-json/wp/v2/posts/{PID}", "POST", {
    "content": isi, "title": A3["judul"], "excerpt": A3["meta"],
    "meta": {"_yoast_wpseo_focuskw": A3["fokus"], "_yoast_wpseo_title": A3["seo"],
             "_yoast_wpseo_metadesc": A3["meta"]}})
print(f"\nupdate #3532 : HTTP {st} | modified {r.get('modified') if isinstance(r, dict) else r}")

st, c = rest(f"/wp-json/wp/v2/posts/{PID}?context=edit&_fields=id,slug,link,status,content,title,categories,"
             f"tags,featured_media,meta")
raw = c["content"]["raw"]
sisa2 = re.findall(r"\{[A-Za-z_\[\]0-9]+\}", raw)
print("\n=== VERIFIKASI ULANG ===")
print(f"  kata       : {kata(raw)}")
print(f"  h2/h3      : {raw.count('<h2>')}/{raw.count('<h3>')}")
print(f"  placeholder: {len(sisa2)} {'(BERSIH)' if not sisa2 else sisa2[:5]}")
print(f"  entri 1    : {re.findall(r'<h3>(.{0,55})', raw)[0]}")
print(f"  beranda    : {'ada' if 'beranda TS Law</a>' in raw else 'TIDAK'}")
print(f"  tombol WA  : {'ada' if 'wa.me/6281909222026' in raw else 'TIDAK'}")
print(f"  FAQPage    : {'ada' if 'FAQPage' in raw else 'TIDAK'}")
cjk = re.findall(r"[\u3000-\u9fff\uac00-\ud7af]", raw)
print(f"  CJK        : {len(cjk)}")
print(f"  kategori   : {c['categories']} | tag {c['tags']} | foto {c['featured_media']} | status {c['status']}")
print(f"  meta       : {json.dumps(c['meta'], ensure_ascii=False)[:200]}")
link_int = set(re.findall(r'href=.https://www\.tslaw\.id/[^"]*', raw))
print(f"  tautan internal: {len(link_int)} buah")
