#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
TS Law — Publish draft artikel website (dari arsip berita CNN) ke tslaw.id.
Idempotent: kalau slug sudah ada di WP → dilewati. Aman dijalankan berulang.

PITFALL tslaw.id (12 Sep 2026): origin sering TIDAK responsif → Cloudflare balas
404 (162 byte) setelah ~60 detik, atau koneksi hang. Request yang sudah di-cache CF
(robots.txt dll) tetap 200. Jadi: script ini retry + laporkan kalau situs down.

Pakai:
  python3 tslaw_publish_drafts.py                 # semua draft .html + .json di folder
  python3 tslaw_publish_drafts.py --cek           # hanya cek kesehatan situs
  python3 tslaw_publish_drafts.py --publish       # status publish (default: draft)
"""
import sys, os, json, time, glob
sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
import tslaw_wp as T

FOLDER = "/home/mantapman/.hermes/profiles/atun/workspace/tslaw_draft_artikel"
STATUS = os.path.join(FOLDER, "_status.json")


def load_status():
    if os.path.exists(STATUS):
        with open(STATUS, encoding="utf-8") as f:
            return json.load(f)
    return {"dipublikasikan": []}


def save_status(s):
    with open(STATUS, "w", encoding="utf-8") as f:
        json.dump(s, f, indent=1, ensure_ascii=False)


def sehat(retries=3, jeda=20):
    """Cek situs benar-benar hidup (butuh origin, bukan cache)."""
    for i in range(1, retries + 1):
        t0 = time.time()
        try:
            r = T.session().get(f"{T.BASE}/categories", params={"per_page": 1, "_fields": "id"},
                                timeout=90)
            ok = r.status_code == 200 and r.text.strip().startswith("[")
            print(f"  cek{i}: {r.status_code} ({time.time()-t0:.0f}s) {'OK' if ok else 'TIDAK OK'}")
            if ok:
                return True
        except Exception as e:
            print(f"  cek{i}: ERR {type(e).__name__} ({time.time()-t0:.0f}s)")
        if i < retries:
            time.sleep(jeda)
    return False


def slug_sudah_ada(slug):
    try:
        r = T.session().get(f"{T.BASE}/posts", params={"slug": slug, "status": "any",
                                                       "per_page": 5, "_fields": "id,slug,status"},
                            timeout=90)
        if r.status_code == 200 and isinstance(r.json(), list):
            return r.json()[0] if r.json() else None
    except Exception:
        pass
    return None


def main():
    args = sys.argv[1:]
    status_publish = "publish" if "--publish" in args else "draft"

    print("🔎 Cek kesehatan tslaw.id ...")
    if not sehat():
        print("❌ tslaw.id TIDAK responsif (origin down / Cloudflare 404). Coba lagi nanti.")
        print("   Draft tetap tersimpan lokal di", FOLDER)
        return 1

    st = load_status()
    sudah = {d["slug"] for d in st["dipublikasikan"]}
    files = sorted(glob.glob(os.path.join(FOLDER, "*.json")))
    files = [f for f in files if not os.path.basename(f).startswith("_")]
    if not files:
        print("ℹ️  Tidak ada metadata draft (*.json) di folder.")
        return 0

    for f in files:
        meta = json.load(open(f, encoding="utf-8"))
        slug = meta["slug"]
        if slug in sudah:
            print(f"⏭️  sudah dipublikasikan: {slug}")
            continue
        ada = slug_sudah_ada(slug)
        if ada:
            print(f"⏭️  sudah ada di WP (id {ada['id']}, {ada['status']}): {slug}")
            st["dipublikasikan"].append({"slug": slug, "id": ada["id"], "status": ada["status"]})
            save_status(st)
            continue
        html = open(os.path.join(FOLDER, meta["file_html"]), encoding="utf-8").read()
        kat = T.cari_kategori(meta.get("kategori", "Hukum Bisnis"))
        tag_ids = []
        s = T.session()
        for nama in meta.get("tags", []):
            r = s.get(f"{T.BASE}/tags", params={"search": nama, "per_page": 10}, timeout=90)
            ada_tag = [t for t in r.json() if t["name"].lower() == nama.lower()] if r.status_code == 200 else []
            if ada_tag:
                tag_ids.append(ada_tag[0]["id"])
            else:
                rr = s.post(f"{T.BASE}/tags", json={"name": nama}, timeout=90)
                if rr.status_code < 400:
                    tag_ids.append(rr.json()["id"])
        p = T.buat_artikel(meta["judul"], slug, html, kat, tags=tag_ids,
                           excerpt=meta.get("excerpt", ""), status=status_publish,
                           meta_desc=meta.get("meta_desc", ""))
        print(f"✅ dibuat id {p['id']} [{p['status']}] {p['link']}")
        st["dipublikasikan"].append({"slug": slug, "id": p["id"], "status": p["status"],
                                     "link": p["link"]})
        save_status(st)
    return 0


if __name__ == "__main__":
    sys.exit(main())
