#!/usr/bin/env python3
"""DAS: pulihkan 5 artikel dari kesalahan penggantian label, lalu rapikan dengan benar."""
import base64, glob, json, os, re, sys, time, urllib.request, urllib.error, importlib.util

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
spec = importlib.util.spec_from_file_location("cfg_das", f"{WS}/cfg_das.py")
m = importlib.util.module_from_spec(spec); spec.loader.exec_module(m)
CFG = m.CFG
DOM, AUTH = CFG["domain"], base64.b64encode(f'{CFG["user"]}:{CFG["pass"]}'.encode()).decode()
UA = {"User-Agent": "Mozilla/5.0"}
BACKUP = f"{WS}/das_pemulihan/label"


def rest(p, 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}{p}", data=body, headers=h, method=method)
    for _ in range(3):
        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()[:200]
        except Exception:
            time.sleep(5)
    return 0, "gagal"


for f in sorted(glob.glob(f"{BACKUP}/post_*.txt")):
    pid = int(re.search(r"post_(\d+)", f).group(1))
    asli = open(f).read()
    # rapikan dengan benar: ganti isi label, pertahankan tag penutup
    def ganti(mm):
        return mm.group(1) + "AMBIL PROMO" + mm.group(3)
    benar = re.sub(r"(<a[^>]*>)\s*(ambil\s*promo)\s*(</a>)", ganti, asli, flags=re.I)
    benar = re.sub(r'\s*onclick="[^"]*klik_wa[^"]*"', "", benar)
    rest(f"/wp-json/wp/v2/posts/{pid}", "POST", {"content": benar})
    _, cek = rest(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=content")
    raw = cek.get("content", {}).get("raw", "") if isinstance(cek, dict) else ""
    dobel = "AMBIL PROMOambil" in raw or "AMBIL PROMOAmbil" in raw
    sisa_pola = ">\\s*ambil promo\\s*<"
    sisa = len(re.findall(sisa_pola, raw, re.I))
    print(f"   #{pid} | teks dobel: {dobel} | jumlah <a> vs </a>: {raw.count('<a ')}/{raw.count('</a>')} | label kecil sisa: {sisa}")
    os.makedirs(f"{BACKUP}_fix", exist_ok=True)
    open(f"{BACKUP}_fix/post_{pid}.txt", "w").write(benar)
