#!/usr/bin/env python3
"""DMark: hidupkan kembali plugin yang nonaktif — satu per satu, dengan pemeriksaan situs setelah tiap langkah."""
import base64, json, re, sys, time, urllib.request, urllib.error, importlib.util

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
spec = importlib.util.spec_from_file_location("cfg_dmark", f"{WS}/cfg_dmark.py")
m = importlib.util.module_from_spec(spec); spec.loader.exec_module(m)
DOM = m.CFG.get("domain", "www.dmark.id")
AUTH = base64.b64encode(f'{m.CFG["user"]}:{m.CFG["pass"]}'.encode()).decode()
UA = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0 Safari/537.36"}

# urutan: pembangun halaman dulu (isi halaman), lalu SEO, lalu formulir, lalu cache paling akhir
URUTAN = [
    ("ultimate-addons-for-gutenberg/ultimate-addons-for-gutenberg", "Spectra (pembangun halaman)"),
    ("wordpress-seo/wp-seo", "Yoast SEO"),
    ("sureforms/sureforms", "SureForms"),
    ("wp-rocket/wp-rocket", "WP Rocket"),
]


def rest(p, method="GET", data=None):
    h = {"Authorization": f"Basic {AUTH}", **UA}
    body = None
    if data is not None:
        body = json.dumps(data).encode(); h["Content-Type"] = "application/json"
    r = urllib.request.Request(f"https://{DOM}{p}", data=body, headers=h, method=method)
    for _ in range(3):
        try:
            with urllib.request.urlopen(r, timeout=150) as x:
                return x.status, json.loads(x.read())
        except urllib.error.HTTPError as e:
            return e.code, e.read().decode()[:250]
        except Exception:
            time.sleep(3)
    return 0, "gagal"


def sehat(u="https://www.dmark.id/contact/?nowprocket=1"):
    """Periksa render segar: apakah isi halaman kembali muncul?"""
    try:
        r = urllib.request.urlopen(urllib.request.Request(u, headers=UA), timeout=90)
        h = r.read().decode("utf-8", "replace")
        return {"status": r.status, "byte": len(h), "judul_h": len(re.findall(r"<h[1-6]", h)),
                "yoast": "yoast-schema-graph" in h, "desc": bool(re.search(r'<meta name="description"', h, re.I)),
                "spectra": len(re.findall(r"spectra", h, re.I))}
    except Exception as e:
        return {"err": str(e)[:80]}


print("=== keadaan awal (render segar halaman /contact/) ===")
print("   ", sehat())

for plugin, nama in URUTAN:
    if "--apply" not in sys.argv:
        print(f"\n[dry run] akan mengaktifkan: {nama}")
        continue
    print(f"\n=== mengaktifkan {nama} ===")
    st, d = rest(f"/wp-json/wp/v2/plugins/{plugin}", "PUT", {"status": "active"})
    if isinstance(d, dict):
        print(f"   status {st} | plugin: {d.get('name')} | keadaan: {d.get('status')}")
    else:
        print(f"   status {st} | balasan: {str(d)[:160]}")
    time.sleep(6)
    hasil = sehat()
    print(f"   pemeriksaan setelah aktivasi: {hasil}")
    if hasil.get("err") or hasil.get("status") != 200:
        print("   ⚠️ SITUS BERMASALAH — hentikan dan laporkan")
        break

print("\n=== daftar plugin setelah semua langkah ===")
st, daftar = rest("/wp-json/wp/v2/plugins")
if isinstance(daftar, list):
    for p in daftar:
        print(f"   {p.get('status'):<10} {p.get('name')}")
