#!/usr/bin/env python3
"""Cek semua situs klien: apakah ada artikel yang barisnya patah di tengah kalimat (baris baru dalam <p>)."""
import base64, importlib.util, json, os, re, time, urllib.request

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
TAG = ("p", "li", "h2", "h3")
SITUS = [("StudioSoft", "cfg_ss.py"), ("TSLaw", "cfg_tslaw.py"), ("The Skin Code", "cfg_tsc.py"),
         ("DAS", "cfg_das.py"), ("Yasmanatura", "cfg_yasma.py"), ("Surabaya Skin Centre", "cfg_ssc.py"),
         ("EveryBe", "cfg_everybe.py"), ("DMark", "cfg_dmark.py"), ("Abimata", "cfg_abimata.py")]


def patahan(isi):
    n, contoh = 0, []
    for mo in re.finditer(r"<(" + "|".join(TAG) + r")(?:\s[^>]*)?>(.*?)</\1>", isi, re.S | re.I):
        dalam = mo.group(2).strip()
        if "\n" not in dalam or "<br" in dalam:
            continue
        baris = [b.strip() for b in dalam.split("\n")]
        for b in baris[:-1]:
            if b and not re.search(r"[.!?:;]\s*$", b):
                n += 1
                if len(contoh) < 1:
                    contoh.append(b[-60:])
    return n, contoh


for nama, berkas in SITUS:
    f = f"{WS}/{berkas}"
    if not os.path.exists(f):
        print(f"   {nama:<20} berkas {berkas} tidak ada")
        continue
    spec = importlib.util.spec_from_file_location("c", f)
    m = importlib.util.module_from_spec(spec)
    try:
        spec.loader.exec_module(m)
        CFG = m.CFG
    except Exception as e:
        print(f"   {nama:<20} gagal baca konfigurasi: {str(e)[:50]}")
        continue
    dom = CFG.get("domain", CFG.get("situs", ""))
    A = base64.b64encode(f"{CFG['user']}:{CFG['pass']}".encode()).decode()
    H = {"Authorization": f"Basic {A}", "User-Agent": "Mozilla/5.0"}
    for jenis in ("posts", "pages"):
        u = (f"https://{dom}/wp-json/wp/v2/{jenis}?per_page=100&status=publish,draft,future"
             "&context=edit&_fields=id,link,content,status&orderby=modified&order=desc")
        try:
            d = json.loads(urllib.request.urlopen(urllib.request.Request(u, headers=H), timeout=180).read())
        except Exception as e:
            print(f"   {nama:<20} {jenis}: gagal ({str(e)[:40]})")
            continue
        if not isinstance(d, list):
            print(f"   {nama:<20} {jenis}: jawaban tak terduga")
            continue
        kena = [(x["id"], x["status"], patahan(x["content"]["raw"])) for x in d]
        kena = [k for k in kena if k[2][0] > 0]
        print(f"   {nama:<20} {jenis:<6} {len(d):>3} entri · bermasalah: {len(kena)}")
        for pid, st, (n, contoh) in kena[:5]:
            print(f"        #{pid} [{st}] patahan {n} · …{contoh[0][:60] if contoh else ''}")
    time.sleep(0.5)
