#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
TS Law — Konten baru berbasis BERITA MEDIA NASIONAL (FIXED 1 Sep 2026, instruksi Bos).
Niche: hukum perdata, pidana, hukum bisnis.
Untuk Threads + LinkedIn: caption + link berita + ajak diskusi masalah hukum.
Anti-duplikat via tslaw_berita_history.json.
"""
import sys, os, json, hashlib
from datetime import datetime, timedelta, timezone

sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import ReplizClient, ACC

WIB = timezone(timedelta(hours=7))
ROOT = "/home/mantapman/.hermes/profiles/atun/workspace"
STATE = os.path.join(ROOT, "tslaw_berita_history.json")

TSLAW_LI = ACC.TSLAW_LINKEDIN   # 6a60101562caae1e04e901ac
TSLAW_T = ACC.TSLAW_THREADS     # 6a35f8b7c5ff4ce3a322b2ed

# ── BERITA MEDIA NASIONAL (CNN Indonesia, 1 Sep 2026 — link verified 200) ──
# (judul, link, niche, angle_hukum)
BERITA = [
    (
        "Ditegur Berkendara Saat Mabuk, WNA Aniaya Warga di Bali",
        "https://www.cnnindonesia.com/nasional/20260901161841-20-1398814/ditegur-berkendara-saat-mabuk-wna-aniaya-warga-di-bali",
        "Hukum Pidana",
        "Penganiayaan (Pasal 351 KUHP)",
    ),
    (
        "Mayat Dibungkus Kardus Gegerkan Warga Babakan Ciparay Bandung",
        "https://www.cnnindonesia.com/nasional/20260901152535-12-1398792/mayat-dibungkus-kardus-gegerkan-warga-babakan-ciparay-bandung",
        "Hukum Pidana",
        "Pembunuhan (Pasal 338 KUHP) & pembuktian",
    ),
    (
        "Kejagung Periksa Tenaga Ahli BGN hingga Yayasan Usut Korupsi MBG",
        "https://www.cnnindonesia.com/nasional/20260901150523-12-1398783/kejagung-periksa-tenaga-ahli-bgn-hingga-yayasan-usut-korupsi-mbg",
        "Hukum Pidana / Tipikor",
        "Korupsi & penyidikan Kejagung",
    ),
    (
        "Bye Dolar: RI-Singapura Sepakat Transaksi Gunakan Mata Uang Lokal",
        "https://www.cnnindonesia.com/ekonomi/20260901134550-78-1398741/bye-dolar-ri-singapura-sepakat-transaksi-gunakan-mata-uang-lokal",
        "Hukum Bisnis",
        "Transaksi LCS & kepatuhan devisa",
    ),
    (
        "Komisi III Ungkap 13 Tindak Pidana yang Bisa Dikenai Perampasan Aset",
        "https://www.cnnindonesia.com/nasional/20260829123500-12-1398000/komisi-iii-ungkap-13-tindak-pidana-yang-bisa-dikenai-perampasan-aset",
        "Hukum Pidana / Pidana Khusus",
        "Rancangan UU Perampasan Aset",
    ),
    # ── Gelombang 2 (2 Sep 2026 — link verified 200) ──
    (
        "Ratusan Santri Keracunan MBG, Wagub Jatim Bantah Ada yang Meninggal",
        "https://www.cnnindonesia.com/nasional/20260902063044-20-1398964/ratusan-santri-keracunan-mbg-wagub-jatim-bantah-ada-yang-meninggal",
        "Hukum Pidana / Perlindungan Konsumen",
        "Tanggung jawab hukum penyelenggara pangan & UU Perlindungan Konsumen",
    ),
    (
        "3 Orang Tewas di Jatim Sepanjang Agustus Diduga Imbas Sound Horeg",
        "https://www.cnnindonesia.com/nasional/20260901184414-20-1398875/3-orang-tewas-di-jatim-sepanjang-agustus-diduga-imbas-sound-horeg",
        "Hukum Pidana",
        "Kelalaian yang mengakibatkan kematian (Pasal 359 KUHP)",
    ),
    (
        "Ketua KPK Bicara Kemungkinan Periksa Bupati Bogor",
        "https://www.cnnindonesia.com/nasional/20260901181526-20-1398861/ketua-kpk-bicara-kemungkinan-periksa-bupati-bogor",
        "Hukum Pidana / Tipikor",
        "Kewenangan penyidikan KPK & proses penegakan hukum",
    ),
    (
        "Amran Bongkar Dugaan Monopoli di Balik Kenaikan Harga Pakan Ayam",
        "https://www.cnnindonesia.com/ekonomi/20260901211306-92-1398925/amran-bongkar-dugaan-monopoli-di-balik-kenaikan-harga-pakan-ayam",
        "Hukum Bisnis",
        "UU Anti Monopoli & praktik persaingan usaha tidak sehat",
    ),
    (
        "DPR Soroti Fenomena Cicil Utang KDKMP Meski Modal Belum Cair",
        "https://www.cnnindonesia.com/nasional/20260901203949-32-1398910/dpr-soroti-fenomena-cicil-utang-kdkmp-meski-modal-belum-cair",
        "Hukum Perdata",
        "Perjanjian pinjam-meminjam & wanprestasi",
    ),
]

def caption_li(judul, url, niche, angle):
    return (
        f"Berita hukum yang menarik untuk dibedah: {judul}. ⚖️\n\n"
        f"Dari sudut {niche}, kasus ini berkaitan dengan {angle}. Sering kali publik hanya melihat permukaan beritanya — "
        f"padahal di baliknya ada banyak aspek hukum yang layak dipahami: bagaimana proses penegakan hukum bekerja, "
        f"apa saja yang harus dibuktikan, dan bagaimana posisi hukum para pihak yang terlibat.\n\n"
        f"Simak berita selengkapnya di sini 👇\n{url}\n\n"
        f"Menurut Anda, bagaimana sebaiknya kasus semacam ini disikapi secara hukum? "
        f"Yuk diskusi di kolom komentar! 👇\n\n"
        f"#TSLaw #HukumPidana #HukumBisnis #KonsultasiHukum #HukumIndonesia #LawFirm"
    )

def reply_li(judul, niche):
    return (
        f"Poin penting: dalam {niche}, setiap kasus punya dua sisi yang harus diperiksa — fakta hukum dan niat. "
        f"Jangan menilai sebelum semua alat bukti terungkap. ⚖️"
    )

def caption_threads(judul, url, niche, angle, bedah=""):
    return (
        f"⚖️ {judul}\n\n"
        f"Dari sisi {niche}: {angle} — {bedah}\n\n"
        f"Simak berita: {url}\n\n"
        f"Menurut Anda bagaimana kasus ini sebaiknya disikapi? Yuk diskusi! 👇\n\n"
        f"#TSLaw #HukumIndonesia"
    )

def reply_threads(judul, niche):
    return (
        f"Intinya: jangan langsung menyimpulkan. Proses hukum itu panjang — butuh alat bukti, pemeriksaan, dan putusan yang sah. ⚖️"
    )

def load_state():
    if os.path.exists(STATE):
        with open(STATE) as f:
            return json.load(f)
    return {"used": [], "posts": []}

def save_state(st):
    with open(STATE, "w") as f:
        json.dump(st, f, indent=1, ensure_ascii=False)

def hsh(t):
    return hashlib.md5(t.encode()).hexdigest()

def main():
    days = int(sys.argv[1]) if len(sys.argv) > 1 else 3
    start = datetime.now(WIB).replace(hour=0, minute=0, second=0, microsecond=0) + timedelta(days=1)
    st = load_state()
    used = set(st["used"])
    client = ReplizClient()
    ok = fail = 0

    print(f"📰 TS Law — Konten Berita Nasional: {len(BERITA)} berita, {days} hari ke depan (mulai {start.strftime('%d/%m/%Y')})")
    print(f"   Target: LinkedIn ({len([b for b in BERITA if b[2].startswith('Hukum')])} berita) + Threads\n")

    # Urutan: hari pertama 2 berita (LI+Threads), dst
    slot_li = 10  # 10:00 WIB
    slot_t = 15   # 15:00 WIB (threads)
    day_idx = 0
    for i, (judul, url, niche, angle) in enumerate(BERITA):
        key = hsh(judul)
        if key in used:
            print(f"  ⏭️  sudah dipakai: {judul[:50]}")
            continue

        tgl = start + timedelta(days=day_idx)
        day_idx += 1
        ds = tgl.strftime("%Y-%m-%d")

        # LinkedIn (TANPA replies — FIX 2 Sep 2026: replies di LinkedIn selalu gagal
        # dengan error "Cannot read properties of undefined (reading 'postId')".
        # Pola terbukti sukses = replies: [] — 100% success 25 Agu-1 Sep (script lama).)
        at_li = tgl.replace(hour=slot_li, minute=0, tzinfo=WIB).astimezone(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.000Z")
        try:
            res = client.create_schedule(
                TSLAW_LI, caption_li(judul, url, niche, angle), at_li,
                title=f"TS Law — {niche}: {judul[:40]}", topic=niche, type_="text",
                replies=[],
            )
            sid = res.get("scheduleId") or res.get("id") or "?"
            ok += 1
            print(f"  ✅ {ds} 10:00 WIB | LinkedIn | {judul[:55]}")
        except Exception as e:
            fail += 1
            print(f"  ❌ {ds} LinkedIn | {judul[:40]}: {e}")

        # Threads (main + 1 reply) jam 15:00 WIB
        at_t = tgl.replace(hour=slot_t, minute=0, tzinfo=WIB).astimezone(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.000Z")
        try:
            res = client.create_schedule(
                TSLAW_T, caption_threads(judul, url, niche, angle), at_t,
                title=f"TS Law — {judul[:40]}", topic=niche, type_="text",
                replies=[{"text": reply_threads(judul, niche), "username": ""}],
            )
            sid = res.get("scheduleId") or res.get("id") or "?"
            ok += 1
            print(f"  ✅ {ds} 15:00 WIB | Threads  | {judul[:55]}")
        except Exception as e:
            fail += 1
            print(f"  ❌ {ds} Threads | {judul[:40]}: {e}")

        st["used"].append(key)
        st["posts"].append({"date": ds, "judul": judul, "niche": niche, "url": url})
        save_state(st)

    save_state(st)
    print(f"\n📊 Total: {ok} OK, {fail} gagal")

if __name__ == "__main__":
    main()
