#!/usr/bin/env python3
"""Bersihkan duplikat blok FAQPage di #3770 — sisakan satu."""
import base64, html, json, re, urllib.request, urllib.error

S = "https://studiosoft.id"
AUTH = base64.b64encode(b"bambangbot:q26r RePo BVy6 pwU2 F3z7 ouyl").decode()
PID = 3770


def api(path, data=None):
    h = {"Authorization": f"Basic {AUTH}", "User-Agent": "Mozilla/5.0"}
    body = None
    if data is not None:
        body = json.dumps(data).encode(); h["Content-Type"] = "application/json"
    r = urllib.request.Request(S + path, data=body, headers=h, method="POST" if data else "GET")
    try:
        with urllib.request.urlopen(r, timeout=200) as x:
            return x.status, json.loads(x.read())
    except urllib.error.HTTPError as e:
        return e.code, e.read().decode()[:300]


st, p = api(f"/wp-json/wp/v2/posts/{PID}?context=edit&_fields=content")
raw = p["content"]["raw"]
skrip = re.findall(r'<script type="application/ld\+json">\s*(\{"@context":"https://schema\.org","@type":"FAQPage".*?\})\s*</script>', raw, re.S)
print(f"blok FAQPage di konten: {len(skrip)}")
for i, s in enumerate(skrip):
    try:
        d = json.loads(s)
        qs = [q.get("name", "")[:60] for q in d.get("mainEntity", [])]
        print(f"  blok {i+1}: {len(qs)} Q → {qs[:2]}")
    except Exception as e:
        print(f"  blok {i+1}: parse gagal {str(e)[:60]}")

if len(skrip) < 2:
    print("tidak ada duplikat — selesai"); raise SystemExit

# simpan yang terakhir (paling baru), hapus yang lain
pertahankan = skrip[-1]
for s in skrip[:-1]:
    raw = raw.replace(s, "KOSONG-HAPUS", 1)
raw = raw.replace("KOSONG-HAPUS", "")
# rapikan kalau ada tag script kosong yang tertinggal
raw = re.sub(r'<script type="application/ld\+json">\s*</script>', "", raw)

st, _ = api(f"/wp-json/wp/v2/posts/{PID}", {"content": raw})
_, chk = api(f"/wp-json/wp/v2/posts/{PID}?context=edit&_fields=content")
sisa = len(re.findall(r'"@type":"FAQPage"', chk["content"]["raw"]))
print(f"POST {st} | blok FAQPage tersisa: {sisa}")
