#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
TS Law — helper WordPress tslaw.id (12 Sep 2026).
PITFALL yang ditemukan:
  - cfg_tslaw.json TIDAK valid JSON standar (ada trailing comma di 3 array items)
    → pakai load_cfg() di sini (toleran), jangan json.load() langsung.
  - tslaw.id di belakang Cloudflare: HTTP/2 dari host ini HANG (konek TLS OK tapi
    request tidak dijawab). WAJIB HTTP/1.1 + timeout panjang (60-180s).
    requests default = HTTP/1.1 → aman, tapi timeout default 30s KEKECILAN.
Pakai: python3 -c "import tslaw_wp as T; print(T.info())"
"""
import base64, json, re, os, sys

ROOT = "/home/mantapman/.hermes/profiles/atun/workspace"
CFG = os.path.join(ROOT, "cfg_tslaw.json")
BASE = "https://tslaw.id/wp-json/wp/v2"
UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120 Safari/537.36"
TIMEOUT = 180          # tslaw.id lambat (~45s/request) — jangan turunkan


def _bersih_json(teks):
    """Buang trailing comma (pola JS) supaya bisa diparse json standar."""
    return re.sub(r",(\s*[\]}])", r"\1", teks)


def load_cfg():
    with open(CFG, encoding="utf-8") as f:
        return json.loads(_bersih_json(f.read()))


def headers():
    cfg = load_cfg()
    tok = base64.b64encode(f"{cfg['user']}:{cfg['pass']}".encode()).decode()
    return {"Authorization": f"Basic {tok}", "User-Agent": UA, "Accept": "application/json"}


def session():
    import requests
    s = requests.Session()
    s.headers.update(headers())
    return s


def get(path, params=None, timeout=None):
    s = session()
    r = s.get(f"{BASE}/{path.lstrip('/')}", params=params, timeout=timeout or TIMEOUT)
    r.raise_for_status()
    return r


def kategori():
    r = get("categories", {"per_page": 100, "_fields": "id,name,count"})
    return r.json()


def cari_kategori(nama, buat=True):
    """Kembalikan id kategori (case-insensitive), buat kalau belum ada."""
    for c in kategori():
        if c["name"].strip().lower() == nama.strip().lower():
            return c["id"]
    if not buat:
        return None
    r = session().post(f"{BASE}/categories", json={"name": nama}, timeout=TIMEOUT)
    r.raise_for_status()
    return r.json()["id"]


def posts(per_page=100, **kw):
    p = {"per_page": per_page, "_fields": "id,slug,title,date,categories,tags,link"}
    p.update(kw)
    return get("posts", p).json()


def ambil_post(pid):
    r = get(f"posts/{pid}", {"context": "edit"})
    j = r.json()
    j["_raw"] = (j.get("content") or {}).get("raw", "")
    return j


def buat_artikel(judul, slug, html, kategori_id, tags=None, excerpt="", status="draft",
                 featured_media=None, meta_desc=None):
    """Buat artikel website. status: 'draft' (aman, default) atau 'publish'."""
    data = {
        "title": judul,
        "slug": slug,
        "content": html,
        "excerpt": excerpt,
        "status": status,
        "categories": [kategori_id] if isinstance(kategori_id, int) else kategori_id,
    }
    if tags:
        data["tags"] = tags
    if featured_media:
        data["featured_media"] = featured_media
    if meta_desc:
        data["meta"] = {"_yoast_wpseo_metadesc": meta_desc}
    r = session().post(f"{BASE}/posts", json=data, timeout=TIMEOUT)
    if r.status_code >= 400:
        raise RuntimeError(f"HTTP {r.status_code}: {r.text[:400]}")
    return r.json()


def info():
    cfg = load_cfg()
    return {"domain": cfg["domain"], "user": cfg["user"], "brand": cfg["brand"],
            "kategori": kategori()}


if __name__ == "__main__":
    print(json.dumps(info(), ensure_ascii=False, indent=1))
