#!/usr/bin/env python3
"""TSLaw: ambil satu kartu kolom (pola Visi) dari /tentang/ sebagai cetakan kartu layanan."""
import os, re

BASE = "/home/mantapman/.hermes/profiles/atun/workspace/tslaw_pemulihan/salinan"
sec2 = open(f"{BASE}/potongan/bagian2.txt").read()


def blok_yang_memuat(teks, pos, tipe="wp:spectra/container"):
    """Cari blok container terdekat yang memuat posisi tertentu (telusuri ke belakang)."""
    pola = re.compile(rf"<!-- (/?)({re.escape(tipe)})(\s[^>]*?)?\s*(/?)-->", re.S)
    kandidat = [m for m in pola.finditer(teks) if m.end() <= pos]
    for m in reversed(kandidat):
        if m.group(1) or m.group(4):      # penutup atau self-closing, lewati
            continue
        # hitung apakah blok ini menutup setelah pos
        dalam, p = 0, m.end()
        while True:
            n = pola.search(teks, p)
            if not n:
                return None
            if n.group(1):
                dalam -= 1
                if dalam == 0:
                    if n.end() >= pos:
                        return teks[m.start():n.end()]
                    break
            elif n.group(4):
                if dalam == 0 and n.end() >= pos:
                    return teks[m.start():n.end()]
            else:
                dalam += 1
            p = n.end()
    return None


i = sec2.find('"text":"Visi"')
kartu = blok_yang_memuat(sec2, i)
print("=== kartu Visi (cetakan) ===")
print(kartu if kartu else "tidak ditemukan")
if kartu:
    os.makedirs(f"{BASE}/potongan", exist_ok=True)
    open(f"{BASE}/potongan/kartu_visi.txt", "w").write(kartu)
    teks_kartu = re.findall(r'"text":"([^"]{3,120})"', kartu)
    print(f"\npanjang: {len(kartu)} char | teks: {teks_kartu}")

print("\n=== struktur container tingkat atas di bagian2 ===")
kedalaman = 0
for m in re.finditer(r"<!-- (/?)(wp:spectra/[a-z\-]+)((?:\s+\{.*?\})?)\s*(/?)-->", sec2, re.S):
    if m.group(1):
        kedalaman -= 1
        continue
    t = re.search(r'"text":"([^"]{3,50})"', m.group(3) or "")
    print(f"   {'  ' * max(kedalaman,0)}{m.group(2):<26}{' /' if m.group(4) else ''} {t.group(1) if t else ''}")
    if not m.group(4):
        kedalaman += 1
