#!/usr/bin/env python3
"""TSLaw: SIMPAN salinan konten semua halaman yang masih utuh + cetak kerangka bloknya.
Salinan disimpan ke berkas lokal supaya tidak terulang kesalahan sebelumnya."""
import base64, json, os, re, time, urllib.request, urllib.error
from collections import Counter

DOM = "tslaw.id"
AUTH = base64.b64encode(b"bambangbot:EFKm EYGx VQCP Y9go ncPr uM2Y").decode()
OUT = "/home/mantapman/.hermes/profiles/atun/workspace/tslaw_pemulihan/salinan"
os.makedirs(OUT, exist_ok=True)


def konten(pid):
    r = urllib.request.Request(f"https://{DOM}/wp-json/wp/v2/pages/{pid}?context=edit&_fields=id,title,content",
                               headers={"Authorization": f"Basic {AUTH}", "User-Agent": "Mozilla/5.0"})
    for _ in range(3):
        try:
            with urllib.request.urlopen(r, timeout=180) as x:
                d = json.loads(x.read())
                return d.get("title", {}).get("rendered", ""), d.get("content", {}).get("raw", "")
        except Exception:
            time.sleep(4)
    return "", ""


for pid, nama in ((834, "tentang"), (12, "layanan"), (2798, "artikel"), (10, "hubungi")):
    judul, raw = konten(pid)
    f = f"{OUT}/{pid}_{nama}.txt"
    open(f, "w").write(raw)
    print(f"  #{pid} {nama:<10} {len(raw):>7} char → {os.path.basename(f)}")

# kerangka blok tingkat atas halaman /tentang/ (kandidat bagian yang bisa dipakai ulang)
_, tentang = konten(834)
print("\n=== kerangka blok /tentang/ (tingkat atas) ===")
kedalaman = 0
for m in re.finditer(r"<!-- (/?)(wp:[a-z0-9\-/]+)((?:\s+\{.*?\})?)\s*(/?)-->", tentang, re.S):
    tutup, nama, attrs, self_close = m.group(1), m.group(2), m.group(3), m.group(4)
    if tutup:
        kedalaman -= 1
        continue
    teks = ""
    t = re.search(r'"text":"([^"]{4,60})"', attrs or "")
    if t:
        teks = t.group(1)
    print(f"   {'  ' * max(kedalaman,0)}{nama}{' /' if self_close else ''} {teks[:60]}")
    if not self_close:
        kedalaman += 1

# cari blok CTA penutup di beberapa halaman
print("\n=== bagian penutup 'Kami Bantu Selesaikan...' ===")
for pid, nama in ((834, "tentang"), (12, "layanan"), (2798, "artikel")):
    _, raw = konten(pid)
    i = raw.find("Kami Bantu Selesaikan")
    if i > 0:
        awal = raw.rfind("<!-- wp:spectra/container", 0, i)
        print(f"   #{pid} {nama}: ditemukan di posisi {i} | mulai blok penutup di {awal} | "
              f"panjang sisa {len(raw)-awal} char")
        open(f"{OUT}/cta_{pid}_{nama}.txt", "w").write(raw[awal:])
        print(f"      → disimpan: cta_{pid}_{nama}.txt")
