#!/usr/bin/env python3
"""
Perbaiki teks CJK (China) yang nyasar di artikel LIVE website klien.
Ditemukan 27 Sep 2026 lewat cek_teks_china_website.py.

Pemakaian:
    python3 perbaiki_teks_china_web.py           # DRY RUN — cuma tampilkan
    python3 perbaiki_teks_china_web.py --run     # eksekusi (PUT ke WP REST)

Edit dilakukan pada `content.raw` (context=edit) → penggantian persis, tidak
menyentuh HTML lain. Ada penjaga: kalau teks lama tidak ketemu / ketemu >1×,
post itu DILEWATI.
"""
import base64
import json
import sys
import urllib.request

USER = "bambangbot"
CREDS = {
    "studiosoft.id": "q26r RePo BVy6 pwU2 F3z7 ouyl",
    "abimataconsultant.com": "gDUe pHaR Lqs2 PHw5 Vr2T K35b",
    "www.leitsurabaya.com": "zibd dLIV xY8x onP9 39qL hiNr",
    "www.dmark.id": "fMqR O6jE Tj7t nvqh AMjv PP1V",
}

# (domain, post_id, teks lama, teks baru, catatan)
FIX = [
    ("studiosoft.id", 4143,
     "preferensi, dan痛点 audiens", "preferensi, dan pain point audiens", "痛点 = pain point"),
    ("studiosoft.id", 3749,
     "SEO yang Berkel延续tan,", "SEO yang Berkelanjutan,", "延续 nyempil di 'Berkelanjutan'"),
    ("abimataconsultant.com", 27555,
     "indikator yang看起来很 impressive", "indikator yang terlihat mengesankan", "看起来很 = 'terlihat'"),
    ("www.leitsurabaya.com", 3864,
     "sehingga同时 melatih dua kemampuan sekaligus", "sehingga sekaligus melatih dua kemampuan", "同时 = 'sekaligus'"),
    ("www.dmark.id", 2532,
     "Banyak yang期待 hasil instan", "Banyak yang mengharapkan hasil instan", "期待 = 'mengharapkan'"),
    ("www.dmark.id", 2322,
     "kebiasaan, dan痛点 (pain points) mereka", "kebiasaan, dan pain point mereka", "痛点 = pain point"),
]


def req(url, pw, method="GET", payload=None):
    h = {"Authorization": "Basic " + base64.b64encode(f"{USER}:{pw}".encode()).decode(),
         "User-Agent": "Mozilla/5.0", "Content-Type": "application/json"}
    r = urllib.request.Request(url, headers=h, method=method,
                               data=json.dumps(payload).encode() if payload else None)
    with urllib.request.urlopen(r, timeout=120) as x:
        return json.loads(x.read())


def raw_content(domain, pid, pw):
    d = req(f"https://{domain}/wp-json/wp/v2/posts/{pid}?context=edit&_fields=id,link,content", pw)
    return d["link"], (d["content"].get("raw") or d["content"].get("rendered") or "")


def main():
    run = "--run" in sys.argv
    ok = skip = 0
    for domain, pid, old, new, note in FIX:
        pw = CREDS.get(domain)
        if not pw:
            print(f"⚠️  {domain} #{pid}: kredensial belum ada → SKIP ({note})")
            skip += 1
            continue
        try:
            link, raw = raw_content(domain, pid, pw)
        except Exception as e:
            print(f"❌ {domain} #{pid}: gagal baca ({getattr(e,'code',e)}) → SKIP")
            skip += 1
            continue
        n = raw.count(old)
        if n != 1:
            print(f"⚠️  {domain} #{pid}: pola ketemu {n}× (harus 1) → SKIP")
            print(f"    {link}")
            skip += 1
            continue
        hasil = raw.replace(old, new)
        print(f"{'✅ DIPERBAIKI' if run else '🔎 DRY'} {domain} #{pid} — {note}")
        print(f"    {link}")
        print(f"    lama : …{old}…")
        print(f"    baru : …{new}…")
        if run:
            try:
                req(f"https://{domain}/wp-json/wp/v2/posts/{pid}", pw, "POST", {"content": hasil})
                # verifikasi baca balik
                _, cek = raw_content(domain, pid, pw)
                bad = cek.count(old)
                print(f"    verifikasi: pola lama sisa {bad}× → {'✅ bersih' if bad == 0 else '❌ MASIH ADA'}")
                ok += 0 if bad else 1
            except Exception as e:
                print(f"    ❌ PUT gagal: {getattr(e,'code',e)}")
                skip += 1
    print(f"\n--- {'diekesekusi' if run else 'dry run'}: {ok} bersih, {skip} dilewati")


if __name__ == "__main__":
    main()
