#!/usr/bin/env python3
"""Verifikasi konsolidasi DAS: status tiap artikel, jumlah publish, isi halaman utama, retry yang gagal."""
import base64, html, json, os, re, urllib.request, urllib.error

SITE = "https://dasindonesia.com"
AUTH = base64.b64encode(b"bambangbot:u3a1 G2pQ 3SWY f0zI OlGP YAjU").decode()
WS = os.path.dirname(os.path.abspath(__file__))


def api(path, data=None, method=None):
    method = method or ("POST" if data is not None else "GET")
    h = {"Authorization": f"Basic {AUTH}", "User-Agent": "Mozilla/5.0"}
    body = None
    if data is not None:
        body = json.dumps(data).encode()
        h["Content-Type"] = "application/json"
    r = urllib.request.Request(SITE + path, data=body, headers=h, method=method)
    try:
        with urllib.request.urlopen(r, timeout=240) as x:
            return x.status, json.loads(x.read())
    except urllib.error.HTTPError as e:
        return e.code, e.read().decode()[:200]


peta = json.load(open(os.path.join(WS, "das_peta_konten.json")))
lapor = json.load(open(os.path.join(WS, "das_konsolidasi_laporan.json")))
ids = [x["src"] for x in lapor]

print("=== STATUS ARTIKEL YANG DISENTUH ===")
masih = []
for pid in ids:
    st, p = api(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=id,slug,title,status,content")
    if not isinstance(p, dict):
        print(f"  #{pid} GAGAL ambil ({st})")
        masih.append(pid)
        continue
    kata = len(html.unescape(re.sub(r"<[^>]+>", " ", p["content"]["raw"])).split())
    tanda = "✅ draft" if p["status"] != "publish" else "⚠️ MASIH PUBLISH"
    if p["status"] == "publish":
        masih.append(pid)
    print(f"  #{pid} {tanda:<16} {kata:>5} kata | {p['title']['rendered'][:58]}")

print(f"\nmasih publish: {len(masih)} → {masih}")

print("\n=== JUMLAH ARTIKEL PER STATUS ===")
for s in ("publish", "draft"):
    tot, page = 0, 1
    while True:
        st, d = api(f"/wp-json/wp/v2/posts?per_page=100&page={page}&status={s}&_fields=id")
        if not isinstance(d, list):
            break
        tot += len(d)
        if len(d) < 100:
            break
        page += 1
    print(f"  {s}: {tot}")

print("\n=== HALAMAN UTAMA HASIL GABUNG (kata sekarang) ===")
for dst in sorted({x["dst"] for x in lapor if x["dst"]}):
    st, p = api(f"/wp-json/wp/v2/posts/{dst}?context=edit&_fields=title,content,link")
    raw = p["content"]["raw"]
    kata = len(html.unescape(re.sub(r"<[^>]+>", " ", raw)).split())
    h2 = len(re.findall(r"<h2[^>]*>", raw, re.I))
    old = next((r["kata"] for r in peta if r["id"] == dst), 0)
    print(f"  #{dst} {old:>5} → {kata:>5} kata | {h2} H2 | {p['title']['rendered'][:50]}")
