#!/usr/bin/env python3
"""Survei 17 Okt 2026 (job PERBAIKAN tslaw.id): kondisi terkini semua post + skor kandidat prioritas 2."""
import base64, json, re, urllib.request, urllib.error, time

DOM = "tslaw.id"
USER, PASS = "bambangbot", "EFKm EYGx VQCP Y9go ncPr uM2Y"
AUTH = base64.b64encode(f"{USER}:{PASS}".encode()).decode()
UA = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124 Safari/537.36"}
OUT = "/home/mantapman/.hermes/profiles/atun/workspace"
AUDIT = f"{OUT}/drafts/tslaw_audit_selaras.json"

# artikel yang sudah digarap 2-14 Okt (dari tslaw_pemulihan/perbaikan_*/CATATAN.md)
SUDAH = {3230, 3208, 3233, 2823, 2940, 3057, 3065, 3232, 3234, 3228, 3179, 3566, 2944, 2931}


def rest(path, timeout=180):
    h = {"Authorization": f"Basic {AUTH}", **UA}
    r = urllib.request.Request(f"https://{DOM}{path}", headers=h)
    for i in range(4):
        try:
            with urllib.request.urlopen(r, timeout=timeout) as x:
                return x.status, json.loads(x.read())
        except urllib.error.HTTPError as e:
            return e.code, e.read().decode()[:300]
        except Exception as e:
            print(f"  (ulang {i+1}: {str(e)[:60]})")
            time.sleep(8)
    return 0, "gagal"


def bersih(html):
    t = re.sub(r"<(script|style)[^>]*>.*?</\1>", " ", html, flags=re.S | re.I)
    t = re.sub(r"<[^>]+>", " ", t)
    t = re.sub(r"&nbsp;?", " ", t)
    t = re.sub(r"&amp;", "&", t)
    return re.sub(r"\s+", " ", t).strip()


print("=== TARIK SEMUA POST (context=edit) ===")
semua, hal = [], 1
while True:
    st, p = rest(f"/wp-json/wp/v2/posts?status=publish,future,draft&per_page=100&page={hal}"
                 f"&context=edit&_fields=id,slug,link,status,title,meta,content")
    if not isinstance(p, list) or not p:
        print(f"  hal {hal}: stop (status {st})")
        break
    semua += p
    if len(p) < 100:
        break
    hal += 1
json.dump(semua, open(f"{OUT}/tslaw_posts_20261017.json", "w"), ensure_ascii=False)
print(f"  total {len(semua)} post (publish {sum(1 for x in semua if x['status']=='publish')})")

audit = {a["id"]: a for a in json.load(open(AUDIT))}
print(f"  snapshot audit: {len(audit)} artikel (8 Okt 2026)")

baris = []
for p in semua:
    if p["status"] != "publish":
        continue
    c = p["content"]["raw"] if isinstance(p["content"], dict) else str(p["content"])
    teks = bersih(c)
    m = p.get("meta", {}) or {}
    baris.append({
        "id": p["id"], "slug": p["slug"], "link": p["link"], "kata": len(teks.split()),
        "judul": p["title"]["raw"] if isinstance(p["title"], dict) else str(p["title"]),
        "wa": len(re.findall(r"wa\.me/\d{6,}", c)),
        "wa_rusak": len(re.findall(r"wa\.me/\d{0,5}(?!\d)", c)),
        "faq_schema": c.count("FAQPage"),
        "h3_tanya": len(re.findall(r"<h3[^>]*>[^<]*\?</h3>", c)),
        "pilar": c.count("/law-firm-surabaya"),
        "h2": len(re.findall(r"<h2", c)),
        "ttalaw": c.count("TTA Law Firm"),
        "fokus": m.get("_yoast_wpseo_focuskw", ""),
        "metadesc": (m.get("_yoast_wpseo_metadesc") or ""),
        "sesi_ga4": (audit.get(p["id"], {}) or {}).get("sesi_ga4", None),
        "tayang": (audit.get(p["id"], {}) or {}).get("tayang", None),
        "klik": (audit.get(p["id"], {}) or {}).get("klik", None),
        "sudah": p["id"] in SUDAH,
    })

json.dump(baris, open(f"{OUT}/drafts/tslaw_kondisi_20261017.json", "w"), ensure_ascii=False, indent=1)

print("\n=== <1000 KATA, BELUM DIGARAP (urut sesi GA4 desc, kata asc) ===")
kand = [b for b in baris if not b["sudah"] and b["kata"] < 1000]
kand.sort(key=lambda x: (-(x["sesi_ga4"] or 0), -0 if x["kata"] >= 600 else 1, x["kata"]))
for b in kand[:18]:
    print(f"  #{b['id']:<5} {b['kata']:>4}kata sesi={b['sesi_ga4']} tayang={b['tayang']} klik={b['klik']} "
          f"H2={b['h2']} WA={b['wa']}(rusak {b['wa_rusak']}) FAQsch={b['faq_schema']} H3tanya={b['h3_tanya']} "
          f"pilar={b['pilar']} TTA={b['ttalaw']} | {b['slug'][:46]} | fokus: {b['fokus']}")

print("\n=== RINGKASAN PUBLISH ===")
print(f"  publish {len(baris)} | <1000 kata {sum(1 for b in baris if b['kata']<1000)} | "
      f"<600 kata {sum(1 for b in baris if b['kata']<600)} | 600-900 kata {sum(1 for b in baris if 600<=b['kata']<=900)} | "
      f"tanpa WA {sum(1 for b in baris if b['wa']==0)} | WA rusak {[b['id'] for b in baris if b['wa_rusak']>0]} | "
      f"FAQ tanpa skema {[b['id'] for b in baris if b['h3_tanya']>0 and b['faq_schema']==0]} | "
      f"tanpa pilar {sum(1 for b in baris if b['pilar']==0)} | TTA {[b['id'] for b in baris if b['ttalaw']>0]}")
print(f"  punya tayangan GSC (snapshot 8 Okt): {[(b['id'], b['tayang'], b['klik']) for b in baris if (b['tayang'] or 0)>0]}")
