#!/usr/bin/env python3
"""Finalisasi klaster klinik: naikkan #5977 ke >=1.000 kata + pasang link silang pilar & pendukung."""
import base64, html, json, re, time, urllib.request, urllib.error

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

TAMBAHAN_5977 = """
<h2>Menjaga konsistensi data di semua kanal</h2>
<p>Alamat, nomor telepon, dan jam buka harus sama persis di profil bisnis, website, media sosial, dan direktori kesehatan mana pun. Perbedaan kecil seperti penulisan "Jl." dan "Jalan" atau nomor yang sudah tidak dipakai membuat mesin pencari ragu menentukan profil mana yang paling terpercaya. Periksa setidaknya dua kali setahun, terutama setelah pindah lokasi atau mengganti nomor layanan.</p>
"""

LINK = {
    5977: ('<h2>Baca juga</h2>\n<p>Langkah lengkapnya ada di '
           '<a href="https://studiosoft.id/kenapa-rumah-sakit-dan-klinik-wajib-punya-strategi-digital-marketing/">panduan digital marketing rumah sakit &amp; klinik</a>, '
           'dan untuk sisi teknisnya lihat <a href="https://studiosoft.id/panduan-seo-untuk-klinik-dan-rumah-sakit/">panduan SEO untuk klinik dan rumah sakit</a>.</p>',
           "<h2>Pertanyaan dan jawaban pada profil</h2>"),
    5974: ('<h2>Baca juga</h2>\n<p>Untuk gambaran menyeluruh, baca '
           '<a href="https://studiosoft.id/kenapa-rumah-sakit-dan-klinik-wajib-punya-strategi-digital-marketing/">panduan digital marketing rumah sakit &amp; klinik</a>, '
           'dan contoh konten yang aman dipakai ada di <a href="https://studiosoft.id/9-contoh-konten-digital-marketing-rumah-sakit-yang-edukatif-dan-tetap-etis/">9 contoh konten edukatif rumah sakit</a>.</p>',
           "<h2>Contoh struktur halaman layanan yang bekerja</h2>"),
    3535: ('<h2>Baca juga</h2>\n<p>Panduan lengkap strateginya ada di '
           '<a href="https://studiosoft.id/kenapa-rumah-sakit-dan-klinik-wajib-punya-strategi-digital-marketing/">digital marketing rumah sakit &amp; klinik</a>, '
           'lengkap dengan SEO lokal dan Google Business Profile.</p>',
           "<h2>Pertanyaan yang sering muncul</h2>"),
}


def api(path, data=None, method=None):
    method = method or ("POST" if data is not None else "GET")
    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"
    err = None
    r = urllib.request.Request(S + path, data=body, headers=h, method=method)
    for _ in range(3):
        try:
            with urllib.request.urlopen(r, timeout=240) as x:
                return x.status, json.loads(x.read())
        except urllib.error.HTTPError as e:
            if e.code in (404, 500, 502, 503, 504):
                time.sleep(4); continue
            return e.code, e.read().decode()[:200]
        except Exception as e:
            err = e; time.sleep(4)
    return 0, str(err)[:150] if err else "gagal"


print("=== 1. #5977 ditambah isi ===")
st, p = api("/wp-json/wp/v2/posts/5977?context=edit&_fields=content")
raw = p["content"]["raw"]
if "Menjaga konsistensi data" not in raw:
    m = re.search(r"\n<h2[^>]*>\s*(Pertanyaan|FAQ|Kesimpulan|Baca juga)", raw, re.I)
    baru = (raw[:m.start()] + TAMBAHAN_5977 + raw[m.start():]) if m else (raw.rstrip() + "\n" + TAMBAHAN_5977)
    api("/wp-json/wp/v2/posts/5977", {"content": baru})
    _, chk = api("/wp-json/wp/v2/posts/5977?context=edit&_fields=content")
    print(f"  {len(html.unescape(re.sub(r'<[^>]+>', ' ', chk['content']['raw'])).split())} kata")
else:
    print("  sudah ada — skip")

print("\n=== 2. Link silang pilar ↔ pendukung ===")
for pid, (blok, anchor) in LINK.items():
    st, p = api(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=content")
    raw = p["content"]["raw"]
    if "Baca juga</h2>" in raw:
        print(f"  #{pid} sudah ada — skip"); continue
    baru = raw.replace(anchor, blok + "\n" + anchor, 1) if anchor in raw else raw.rstrip() + "\n" + blok
    st2, _ = api(f"/wp-json/wp/v2/posts/{pid}", {"content": baru})
    _, chk = api(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=content")
    n = len(set(re.findall(r'href="https://studiosoft\.id/([^"#?]+)', chk["content"]["raw"])))
    print(f"  #{pid} POST {st2} | link internal sekarang: {n}")

print("\n=== 3. Ringkasan klaster ===")
for pid in (5970, 5974, 5977, 3535):
    _, p = api(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=title,content,status")
    raw = p["content"]["raw"]
    print(f"  #{pid} [{p['status']}] {len(html.unescape(re.sub(r'<[^>]+>', ' ', raw)).split()):>5} kata | "
          f"FAQ {'ada' if 'FAQPage' in raw else 'tidak':<5} | {html.unescape(p['title']['rendered'])[:52]}")
