#!/usr/bin/env python3
"""DAS: audit tombol CTA di SELURUH 151 artikel — varian teks, nomor WA, warna, dan yang belum punya."""
import base64, html, json, os, re, time, urllib.request, urllib.error, importlib.util
from collections import Counter

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):
    r = urllib.request.Request(f"https://{DOM}{p}", headers={"Authorization": f"Basic {AUTH}", **UA})
    for _ in range(3):
        try:
            with urllib.request.urlopen(r, timeout=180) as x:
                return json.loads(x.read())
        except Exception:
            time.sleep(4)
    return []


posts, page = [], 1
while True:
    d = rest(f"/wp-json/wp/v2/posts?per_page=100&page={page}&status=publish&context=edit&_fields=id,slug,title,content")
    if not isinstance(d, list):
        break
    posts += d
    if len(d) < 100:
        break
    page += 1
print(f"artikel diperiksa: {len(posts)}")

teks_cta = Counter()
nomor = Counter()
warna = Counter()
tanpa_wa, tanpa_promo = [], []
punya_promo = 0
for p in posts:
    raw = p.get("content", {}).get("raw", "") or ""
    ada_promo = bool(re.search(r"AMBIL\s*PROMO", raw, re.I))
    tautan_wa = re.findall(r"https?://(?:wa\.me|api\.whatsapp\.com/send/\?phone=)[^\"'\s>]+", raw)
    if ada_promo:
        punya_promo += 1
    else:
        tanpa_promo.append(p)
    if not tautan_wa:
        tanpa_wa.append(p)
    # teks tombol yang tampil
    for t in re.findall(r'>\s*([A-Z][A-Za-z0-9 &+!\.\-]{3,40})\s*</a>', raw):
        teks_cta[t.strip()] += 1
    for t in tautan_wa:
        mm = re.search(r"(?:wa\.me/|phone=%20?)(\d+)", t)
        if mm:
            nomor[mm.group(1)] += 1
    for c in re.findall(r"background-color:\s*(#[0-9a-fA-F]{6})", raw):
        warna[c.lower()] += 1

print(f"\n=== tombol 'AMBIL PROMO' di isi artikel ===")
print(f"   punya  : {punya_promo}")
print(f"   belum  : {len(tanpa_promo)}")
print("\n=== nomor WhatsApp yang dipakai ===")
for n, c in nomor.most_common(6):
    print(f"   {n} → {c} tautan")
print("\n=== warna tombol yang dipakai (top 6) ===")
for w, c in warna.most_common(6):
    print(f"   {w} → {c}x")
print("\n=== teks tombol (top 10) ===")
for t, c in teks_cta.most_common(10):
    print(f"   {c:>4}x  {t}")

print(f"\n=== artikel TANPA satu pun tautan WA ({len(tanpa_wa)}) ===")
for p in tanpa_wa[:20]:
    print(f"   #{p['id']:>5} {html.unescape(p['title']['rendered'])[:56]}")
print(f"\n=== artikel TANPA tombol AMBIL PROMO ({len(tanpa_promo)}) — contoh 20 ===")
for p in tanpa_promo[:20]:
    print(f"   #{p['id']:>5} {html.unescape(p['title']['rendered'])[:56]}")

json.dump({"tanpa_promo": [p["id"] for p in tanpa_promo], "tanpa_wa": [p["id"] for p in tanpa_wa]},
          open(f"{WS}/drafts/das_audit_cta.json", "w"), indent=1)
print(f"\n→ drafts/das_audit_cta.json")
