#!/usr/bin/env python3
"""TSLaw: lengkapi judul SEO + meta description halaman yang kosong (BERANDA DILEWATI).
Halaman: /tentang/, /practice-areas/, /hubungi/, /artikel/. Jalankan --apply untuk menyimpan."""
import base64, html, json, sys, time, urllib.request, urllib.error

DOM = "tslaw.id"
AUTH = base64.b64encode(b"bambangbot:EFKm EYGx VQCP Y9go ncPr uM2Y").decode()
UA = {"User-Agent": "Mozilla/5.0"}

RENCANA = [
    {"id": 834, "url": "/tentang/", "fokus": "tito suprianto law firm",
     "judul": "Tentang Tito Suprianto Law Firm, Advokat Surabaya",
     "meta": "Profil Tito Suprianto Law Firm: kantor advokat dan konsultan hukum di Surabaya. Kenali tim, pengalaman, dan cara kami mendampingi klien."},
    {"id": 12, "url": "/practice-areas/", "fokus": "layanan hukum surabaya",
     "judul": "Layanan Hukum Tito Suprianto Law Firm Surabaya",
     "meta": "Layanan hukum kami: sengketa tanah, kontrak bisnis, merek dagang, hukum keluarga, dan pendampingan perusahaan. Konsultasi dengan advokat Surabaya."},
    {"id": 10, "url": "/hubungi/", "fokus": "konsultasi hukum surabaya",
     "judul": "Hubungi Kami | Konsultasi Hukum Surabaya - Tito Suprianto",
     "meta": "Hubungi kantor advokat Tito Suprianto Law Firm di Surabaya. Kirim pertanyaan hukum Anda atau jadwalkan konsultasi bersama tim kami."},
    {"id": 2798, "url": "/artikel/", "fokus": "artikel hukum",
     "judul": "Artikel Hukum dan Panduan Praktis | Tito Suprianto Law Firm",
     "meta": "Kumpulan artikel hukum: kontrak bisnis, sengketa tanah, merek dagang, sampai hukum keluarga. Ditulis tim advokat Tito Suprianto Law Firm Surabaya."},
]


def wp(path, 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}{path}", data=body, headers=h, method=method)
    for _ in range(3):
        try:
            with urllib.request.urlopen(r, timeout=120) as x:
                return x.status, json.loads(x.read())
        except urllib.error.HTTPError as e:
            return e.code, e.read().decode()[:250]
        except Exception:
            time.sleep(4)
    return 0, "gagal"


print("=== SEBELUM ===")
for r in RENCANA:
    st, p = wp(f"/wp-json/wp/v2/pages/{r['id']}?context=edit&_fields=id,title,meta")
    m = p.get("meta", {}) if isinstance(p, dict) else {}
    print(f"  #{r['id']} {r['url']:<18} judul SEO: {m.get('_yoast_wpseo_title') or '(kosong)':<44} "
          f"meta: {len(m.get('_yoast_wpseo_metadesc') or '')} char")

print("\n=== RENCANA ===")
for r in RENCANA:
    print(f"\n  #{r['id']} {r['url']}")
    print(f"     judul ({len(r['judul'])} char): {r['judul']}")
    print(f"     meta  ({len(r['meta'])} char): {r['meta']}")
    print(f"     fokus : {r['fokus']}")

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

print("\n=== MENYIMPAN ===")
for r in RENCANA:
    st, _ = wp(f"/wp-json/wp/v2/pages/{r['id']}", "POST",
               {"meta": {"_yoast_wpseo_title": r["judul"], "_yoast_wpseo_metadesc": r["meta"],
                         "_yoast_wpseo_focuskw": r["fokus"]}})
    st2, cek = wp(f"/wp-json/wp/v2/pages/{r['id']}?context=edit&_fields=meta")
    m = cek.get("meta", {}) if isinstance(cek, dict) else {}
    ok = m.get("_yoast_wpseo_title") == r["judul"] and m.get("_yoast_wpseo_metadesc") == r["meta"]
    print(f"  #{r['id']} {r['url']:<18} HTTP {st} | tersimpan: {'✅' if ok else '❌'}")
    if not ok:
        print("     judul sekarang :", m.get("_yoast_wpseo_title"))
        print("     meta sekarang  :", (m.get("_yoast_wpseo_metadesc") or "")[:80])
