#!/usr/bin/env python3
"""Perbaikan label merek pada post 3228 (bagian dari suntingan 11 Okt 2026).

Temuan: anchor penutup menulis "TTA Law Firm", padahal nama resmi di situs adalah
"Tito Suprianto Law Firm" dan tombol WhatsApp di artikel yang sama memakai nama
"TS Law". Label "TTA Law Firm" keliru pada 6 artikel lama (3205, 3207, 3219, 3228,
3232, 3234); perbaikan label merek sudah dilakukan 4 Okt 2026 pada post 3233
("TTA Law Firm" -> "TS Law"). Di sini hanya post 3228 yang disentuh.

Jalankan tanpa argumen = dry run. Tambah --apply untuk menulis via REST (JSON).
"""
import base64, json, os, re, sys
import urllib.request, urllib.error

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
sys.path.insert(0, WS)
from cfg_tslaw import CFG

AUTH = base64.b64encode(f"{CFG['user']}:{CFG['pass']}".encode()).decode()
BASE = "https://tslaw.id/wp-json/wp/v2"
HDR = {"Authorization": f"Basic {AUTH}", "User-Agent": "Mozilla/5.0"}

PID = 3228
OUT = f"{WS}/tslaw_pemulihan/perbaikan_20261011"
APPLY = "--apply" in sys.argv
LAMA = "kantor pengacara terpercaya seperti TTA Law Firm"
BARU = "kantor pengacara terpercaya seperti TS Law"


def rest(method, path, payload=None, timeout=180):
    req = urllib.request.Request(BASE + path, headers={**HDR, "Content-Type": "application/json"},
                                 method=method,
                                 data=json.dumps(payload).encode() if payload else None)
    try:
        with urllib.request.urlopen(req, timeout=timeout) as r:
            return r.status, json.load(r)
    except urllib.error.HTTPError as e:
        return e.code, e.read().decode()[:600]


kode, p = rest("GET", f"/posts/{PID}?context=edit")
raw = p["content"]["raw"]
json.dump(p, open(f"{OUT}/post_{PID}_SEBELUM_b.json", "w"), ensure_ascii=False, indent=1)
open(f"{OUT}/post_{PID}_SEBELUM_b.html", "w").write(raw)
assert raw.count(LAMA) == 1, f"anchor merek tidak unik ({raw.count(LAMA)})"
assert "TTA Law Firm" not in raw.replace(LAMA, ""), "masih ada 'TTA Law Firm' lain di artikel ini"

konten = raw.replace(LAMA, BARU, 1)
assert konten != raw
assert konten.replace(BARU, LAMA, 1) == raw, "perubahan keluar dari anchor merek"
FPAGE = '"@type": "FAQPage"'
print(f"[rencana] {LAMA!r} -> {BARU!r}")
print(f"[cek] wa.me/6281909222026 = {konten.count('wa.me/6281909222026')} | FAQPage = {konten.count(FPAGE)}")

if not APPLY:
    open(f"{OUT}/post_{PID}_SESUDAH_b_dryrun.html", "w").write(konten)
    print("[DRY RUN] tidak ada yang dikirim.")
    sys.exit(0)

kode, resp = rest("POST", f"/posts/{PID}", {"content": konten})
print(f"[POST] status {kode}")
json.dump(resp, open(f"{OUT}/post_{PID}_POSTRESP_b.json", "w"), ensure_ascii=False, indent=1)
if kode != 200:
    print("GAGAL:", resp)
    sys.exit(1)

kode, q = rest("GET", f"/posts/{PID}?context=edit")
raw2 = q["content"]["raw"]
open(f"{OUT}/post_{PID}_SESUDAH_b.html", "w").write(raw2)
verif = {
    "id": PID, "modified": q["modified"], "link": q["link"],
    "TTA_merek_tersisa": raw2.count("TTA Law Firm"),
    "TS_Law_di_anchor": raw2.count(BARU),
    "tombol_wa": raw2.count("wa.me/6281909222026"),
    "skema_faqpage": raw2.count('"@type": "FAQPage"'),
    "sisipan_4_bagian_utuh": all(s in raw2 for s in
        ["Tanah Girik, Letter C, dan Petok D", "Mengurus Sertifikat Tanah Warisan",
         "Cara Mengecek Status Pengurusan dan Kondisi Bidang Tanah", "Pajak yang Muncul saat Balik Nama Tanah"]),
    "tautan_htm": raw2.count("cara-mengurus-sengketa-tanah-secara-hukum.htm"),
    "selain_label_identik": raw2.replace(BARU, LAMA, 1) == raw,
}
json.dump(verif, open(f"{OUT}/post_{PID}_VERIFIKASI_b.json", "w"), ensure_ascii=False, indent=1)
print("[verifikasi REST]", json.dumps(verif, ensure_ascii=False, indent=1))
