#!/usr/bin/env python3
"""DAS: bersihkan pelacak klik_wa yang tidak berfungsi (kembalikan isi artikel dari salinan)."""
import base64, glob, json, os, re, 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"}


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"


# ambil salinan TERTUA per artikel (sebelum pelacak ditanam)
salinan = {}
for f in sorted(glob.glob(f"{WS}/das_pemulihan/tracking/post_*.txt")):
    pid = int(re.search(r"post_(\d+)", f).group(1))
    salinan.setdefault(pid, f)
for f in sorted(glob.glob(f"{WS}/das_pemulihan/tracking2/post_*.txt")):
    pid = int(re.search(r"post_(\d+)", f).group(1))
    salinan[pid] = f      # versi terbaru sebelum perubahan berikutnya (tanpa pelacak)
print(f"artikel yang dikembalikan: {len(salinan)}")

ok = gagal = 0
for i, (pid, f) in enumerate(sorted(salinan.items()), 1):
    bersih = open(f).read()
    if "klik_wa" in bersih:
        # kalau salinan justru memuat pelacak, buang atributnya
        bersih = re.sub(r'\s*onclick="[^"]*klik_wa[^"]*"', "", bersih)
    rest(f"/wp-json/wp/v2/posts/{pid}", "POST", {"content": bersih})
    _, cek = rest(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=content")
    raw = cek.get("content", {}).get("raw", "") if isinstance(cek, dict) else ""
    ok, gagal = (ok + 1, gagal) if "klik_wa" not in raw else (ok, gagal + 1)
    if i % 25 == 0 or i == len(salinan):
        print(f"   {i}/{len(salinan)} | bersih {ok} | sisa {gagal}")

print("\n=== verifikasi akhir ===")
posts, page = [], 1
while True:
    st, d = rest(f"/wp-json/wp/v2/posts?per_page=100&page={page}&status=publish&context=edit&_fields=id,content")
    if not isinstance(d, list):
        break
    posts += d
    if len(d) < 100:
        break
    page += 1
sisa = sum(1 for p in posts if "klik_wa" in (p.get("content", {}).get("raw", "") or ""))
print(f"   artikel yang masih memuat pelacak: {sisa}/{len(posts)}")
tombol = sum(1 for p in posts if "AMBIL PROMO" in (p.get("content", {}).get("raw", "") or ""))
print(f"   artikel dengan tombol AMBIL PROMO: {tombol}/{len(posts)}")
