#!/usr/bin/env python3
"""DAS: klasifikasi tombol AMBIL PROMO di 151 artikel — sumber warna (inline vs kelas WP), tautan, dan teks."""
import base64, html, json, os, re, time, urllib.request, 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"}
WARNA = "#d02c35"


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,link,content")
    if not isinstance(d, list):
        break
    posts += d
    if len(d) < 100:
        break
    page += 1

warna_inline, warna_kelas, tanpa_warna = [], [], []
tautan_beda = []
teks_beda = []
per_artikel = []
for p in posts:
    raw = p.get("content", {}).get("raw", "") or ""
    for mm in re.finditer(r'<a[^>]*>[^<]*AMBIL\s*PROMO[^<]*</a>', raw, re.I):
        el = mm.group(0)
        href = re.search(r'href="([^"]+)"', el)
        gaya = re.search(r"background-color:\s*([#a-zA-Z0-9(),\.\s]+?)[;\"']", el)
        kelas = re.search(r'class="([^"]*background[^"]*)"', el)
        teks = re.sub(r"<[^>]+>", "", el).strip()
        per_artikel.append({"id": p["id"], "slug": p["slug"], "href": href.group(1) if href else "",
                            "warna": gaya.group(1) if gaya else None, "kelas": kelas.group(1) if kelas else None,
                            "teks": teks})
        if gaya:
            (warna_inline if WARNA in (gaya.group(1) or "").lower() else warna_inline).append(p["id"]) if WARNA in (gaya.group(1) or "").lower() else warna_inline.append(p["id"])
        elif kelas:
            warna_kelas.append(p["id"])
        else:
            tanpa_warna.append(p["id"])
        if href and "6285242380789" not in href.group(1):
            tautan_beda.append((p["id"], p["slug"], href.group(1)[:80]))
        if teks.upper() != "AMBIL PROMO":
            teks_beda.append((p["id"], p["slug"], teks[:40]))

print(f"total tombol AMBIL PROMO ditemukan: {len(per_artikel)} di {len(posts)} artikel\n")
print("=== sumber warna tombol ===")
tot = len(per_artikel)
n_merah = sum(1 for x in per_artikel if x["warna"] and WARNA in (x["warna"] or "").lower())
n_kelas = sum(1 for x in per_artikel if not (x["warna"] and WARNA in (x["warna"] or "").lower()) and x["kelas"])
n_polos = tot - n_merah - n_kelas
print(f"   inline {WARNA} (benar) : {n_merah}")
print(f"   pakai kelas WP        : {n_kelas}")
print(f"   tanpa warna sama sekali: {n_polos}")

print("\n=== kelas warna yang masih dipakai ===")
for k, c in Counter(x["kelas"] for x in per_artikel if x["kelas"]).most_common(6):
    print(f"   {c:>4}x  {k[:70]}")

print("\n=== tombol dengan tautan BUKAN nomor DAS ===")
for pid, slug, href in tautan_beda[:12]:
    print(f"   #{pid:>5} /{slug[:44]:<46} {href}")

print("\n=== teks tombol yang belum 'AMBIL PROMO' ===")
for pid, slug, teks in teks_beda[:12]:
    print(f"   #{pid:>5} /{slug[:44]:<46} «{teks}»")
print(f"\n   jumlah: warna salah/kelas {n_kelas + n_polos} · tautan lain {len(tautan_beda)} · teks lain {len(teks_beda)}")
json.dump(per_artikel, open(f"{WS}/drafts/das_tombol_promo.json", "w"), indent=1, ensure_ascii=False)
