#!/usr/bin/env python3
"""TSLaw: tautkan 13 artikel Surabaya ke halaman pilar /law-firm-surabaya/ dengan anchor bervariasi.
Pakai --apply untuk menulis. Tiap artikel disalin dulu."""
import base64, html, json, os, re, sys, time, urllib.request, urllib.error, importlib.util

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)
DOM, AUTH = "www.tslaw.id", base64.b64encode(f'{m.CFG["user"]}:{m.CFG["pass"]}'.encode()).decode()
UA = {"User-Agent": "Mozilla/5.0"}
BACKUP = f"{WS}/tslaw_pemulihan"
os.makedirs(BACKUP, exist_ok=True)
PILAR = "https://www.tslaw.id/law-firm-surabaya/"

ANCHOR = ["law firm Surabaya", "panduan memilih law firm Surabaya", "kantor hukum di Surabaya",
          "law firm di Surabaya", "firma hukum Surabaya", "memilih pendamping hukum di Surabaya"]

KALIMAT = {
    0: "BACA JUGA : <a href=\"{p}\">{a}</a> — panduan lengkap soal jenis layanan, kisaran biaya, dan cara menilai kredibilitas advokat.",
    1: "BACA JUGA : <a href=\"{p}\">{a}</a>, berisi hal-hal yang perlu dicek sebelum menunjuk pendamping hukum.",
    2: "BACA JUGA : <a href=\"{p}\">{a}</a> untuk memahami alur, biaya, dan cara kerja kantor hukum.",
}


def req(p, 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}{p}", data=body, headers=h, method=method)
    for _ in range(3):
        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()[:200]
        except Exception:
            time.sleep(5)
    return 0, "gagal"


posts, page = [], 1
while True:
    st, d = req(f"/wp-json/wp/v2/posts?per_page=100&page={page}&status=publish&context=edit&_fields=id,slug,title,content")
    if not isinstance(d, list):
        break
    posts += d
    if len(d) < 100:
        break
    page += 1

sasaran = []
for p in posts:
    judul = (p["title"]["raw"] + " " + p["slug"]).lower()
    if "surabaya" in judul:
        sasaran.append(p)
print(f"artikel Surabaya: {len(sasaran)}")

rencana = []
for i, p in enumerate(sasaran):
    raw = p.get("content", {}).get("raw", "") or ""
    if PILAR in raw:
        print(f"   #{p['id']} sudah menautkan pilar — dilewati")
        continue
    anchor = ANCHOR[i % len(ANCHOR)]
    kalimat = KALIMAT[i % len(KALIMAT)].format(p=PILAR, a=anchor)
    blok = f"\n<p><strong>{kalimat}</strong></p>\n"
    # sisipkan sebelum skrip skema, atau sebelum penutup, atau di akhir
    pos = raw.find("<script")
    if pos == -1:
        pos = len(raw)
    baru = raw[:pos].rstrip() + blok + raw[pos:]
    rencana.append({"id": p["id"], "slug": p["slug"], "raw": raw, "baru": baru, "anchor": anchor})

print(f"\nakan ditautkan: {len(rencana)} artikel")
for r in rencana[:14]:
    print(f"   #{r['id']} /{r['slug'][:50]:<52} anchor: «{r['anchor']}»")

if "--apply" not in sys.argv:
    print("\n(dry run — pakai --apply)")
    sys.exit(0)

ok = 0
for r in rencana:
    open(f"{BACKUP}/post_{r['id']}.txt", "w").write(r["raw"])
    req(f"/wp-json/wp/v2/posts/{r['id']}", "POST", {"content": r["baru"]})
    st, cek = req(f"/wp-json/wp/v2/posts/{r['id']}?context=edit&_fields=content")
    raw2 = cek.get("content", {}).get("raw", "") if isinstance(cek, dict) else ""
    bagus = PILAR in raw2 and len(raw2) > len(r["raw"])
    ok += 1 if bagus else 0
    print(f"   #{r['id']} {'✅' if bagus else '⚠️'} | panjang {len(r['raw'])} → {len(raw2)} | pilar tertaut: {PILAR in raw2}")
print(f"\nselesai: {ok}/{len(rencana)}")
