#!/usr/bin/env python3
"""Jadwalkan seri IG TS Law "Mitos atau Fakta Seputar Hukum" — 11 poster Bos (21 Sep 2026).

Aturan dari Bos:
  - Instagram TS Law, 1 post setiap 3 hari, jam 11:00 WIB (04:00Z).
  - Caption WAJIB sesuai isi gambar (tiap poster beda mitos & fakta + narasumbernya).
  - Hashtag HURUF KECIL semua. Tanpa mention akun.

Akun: TS Law IG = 6a76a54d62caae1e04f30968
Media: openclaw-img/tslaw_mitos_fakta_01..11.jpg (1080x1350, sudah 200 di funnel).
"""
import sys
import time
from datetime import datetime, timedelta, timezone

sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import get_client  # noqa: E402

AKUN = "6a76a54d62caae1e04f30968"
BASE = "https://mantapserver.tail3947bb.ts.net/openclaw-img/"
TOPIC = "Edukasi Hukum"
CTA = ("Butuh pendampingan hukum? Konsultasikan masalah hukum Anda dengan Tito Suprianto Law Firm: "
       "https://tslaw.id\n\U0001f4f2 WhatsApp: +62 819-0922-2026")

# (no file, tanggal WIB, judul, isi caption tanpa CTA & hashtag, tag tambahan)
POSTS = [
    (1, "2026-09-22", "TS Law — Mitos atau Fakta: Viral Bukan Berarti Bersalah",
     "Viral di media sosial bukan berarti orangnya otomatis bersalah.\n\n"
     "Ramai dibicarakan memang menarik perhatian, tapi belum membuktikan apa pun. Seseorang tetap dianggap "
     "tidak bersalah sampai ada putusan pengadilan yang berkekuatan hukum tetap.\n\n"
     "Sarah Oktavia Prasanti, S.H. mengingatkan hal ini di poster seri Mitos atau Fakta Seputar Hukum.\n\n"
     "Menurut Anda, apa yang paling sering bikin orang cepat menghakimi di kolom komentar? Tulis di komentar. \U0001f447",
     ["#mitosataufakta", "#pradugatakbersalah", "#hukumpidana"]),

    (2, "2026-09-25", "TS Law — Mitos atau Fakta: Utang dan Pidana",
     "Tidak bayar utang, langsung masuk penjara? Tidak sesederhana itu.\n\n"
     "Ketidakmampuan membayar utang pada dasarnya persoalan perdata. Ranahnya bisa berubah kalau sejak awal "
     "memang ada unsur penipuan, misalnya pinjaman yang diajukan dengan data atau niat yang tidak jujur.\n\n"
     "Nabila Khalisa Paramita, S.H. menjelaskan bedanya di poster ini. Pahami dulu perbedaan perdata dan pidana "
     "sebelum menentukan langkah.\n\n"
     "Kalau Anda menghadapi utang piutang, mana yang Anda tempuh lebih dulu: somasi atau musyawarah? "
     "Boleh dibagi di komentar. \U0001f447",
     ["#mitosataufakta", "#hukumperdata", "#hukumpidana", "#utangpiutang"]),

    (3, "2026-09-28", "TS Law — Mitos atau Fakta: Sah Tanpa Notaris",
     "Perjanjian baru sah kalau dibuat di hadapan notaris? Anggapan ini masih sering muncul.\n\n"
     "Faktanya, perjanjian bisa sah tanpa notaris asalkan para pihak sepakat, cakap hukum, objeknya jelas, dan "
     "sebabnya halal. Notaris berperan memperkuat pembuktian, bukan satu-satunya syarat sah.\n\n"
     "Dicky Andika Hartanto, S.H. menegaskan itu di poster ini. Pesannya sederhana: baca setiap kesepakatan "
     "sebelum menandatangani.\n\n"
     "Ada klausul perjanjian yang menurut Anda paling sering diabaikan orang? Tulis di komentar. \U0001f447",
     ["#mitosataufakta", "#hukumperdata", "#perjanjian", "#notaris"]),

    (4, "2026-10-01", "TS Law — Mitos atau Fakta: Jaminan Saat Utang Macet",
     "Debitur telat bayar, kreditur langsung ambil jaminan? Tidak bisa begitu.\n\n"
     "Cidera janji tidak otomatis membuat kreditur memiliki objek jaminan. Penyelesaiannya harus mengikuti "
     "mekanisme hukum yang berlaku, dan pemilik jaminan tetap punya hak atas objeknya.\n\n"
     "Nabila Khalisa Paramita, S.H. menjelaskan hal ini di poster. Jaminan bukan berarti boleh diambil sepihak.\n\n"
     "Pernah menemui kasus jaminan yang diambil tanpa prosedur? Boleh dibagi di komentar. \U0001f447",
     ["#mitosataufakta", "#hukumperdata", "#jaminan", "#utangpiutang"]),

    (5, "2026-10-04", "TS Law — Mitos atau Fakta: Lapor Polisi Bukan Vonis",
     "Dilaporkan ke polisi lalu dianggap sudah pasti bersalah? Itu dua hal yang berbeda.\n\n"
     "Laporan polisi adalah awal pemeriksaan, bukan vonis. Setiap orang tetap harus diperlakukan berdasarkan "
     "asas praduga tak bersalah sampai ada putusan pengadilan yang berkekuatan hukum tetap.\n\n"
     "Sarah Oktavia Prasanti, S.H. mengingatkan hal ini di poster. Laporan bukan hukuman.\n\n"
     "Menurut Anda, kenapa masih banyak yang menyamakan laporan dengan pembuktian? Silakan tulis di komentar. \U0001f447",
     ["#mitosataufakta", "#hukumpidana", "#pradugatakbersalah", "#hukumacara"]),

    (6, "2026-10-07", "TS Law — Mitos atau Fakta: Akses Bantuan Hukum",
     "Bantuan hukum cuma untuk orang yang mampu bayar pengacara? Tidak juga.\n\n"
     "Masyarakat bisa mencari pendampingan lewat lembaga bantuan hukum terakreditasi, Posbankum, atau layanan "
     "konsultasi hukum pemerintah. Yang penting tahu ke mana harus datang.\n\n"
     "Dicky Andika Hartanto, S.H. menjelaskan jalurnya di poster ini. Memahami hak adalah langkah pertama.\n\n"
     "Anda tahu di mana layanan bantuan hukum terdekat di kota Anda? Tulis di komentar. \U0001f447",
     ["#mitosataufakta", "#bantuanhukum", "#hakakseskeadilan", "#literasihukum"]),

    (7, "2026-10-10", "TS Law — Mitos atau Fakta: Penyitaan Barang",
     "Polisi boleh menyita barang tanpa surat? Perlu dipahami dulu prosedurnya.\n\n"
     "Pada umumnya penyitaan harus mengikuti prosedur hukum dan izin yang dipersyaratkan. Namun ada pengecualian "
     "tertentu yang diatur dalam hukum acara pidana.\n\n"
     "Nabila Khalisa Paramita, S.H. merangkumnya di poster ini. Pahami prosedur sebelum menyerahkan barang.\n\n"
     "Kalau petugas meminta barang Anda, apa hal pertama yang akan Anda tanyakan? Komentar. \U0001f447",
     ["#mitosataufakta", "#hukumacara", "#hukumpidana", "#penyitaan"]),

    (8, "2026-10-13", "TS Law — Mitos atau Fakta: Panggilan Saksi",
     "Panggilan resmi dari penegak hukum, boleh diabaikan? Sebaiknya tidak.\n\n"
     "Saksi yang menerima panggilan resmi diharapkan hadir dan memberi keterangan sesuai yang diketahuinya. "
     "Kalau benar-benar berhalangan, sampaikan alasannya lewat jalur yang tepat, bukan dibiarkan tanpa kabar.\n\n"
     "Sarah Oktavia Prasanti, S.H. menegaskan ini di poster. Jangan abaikan panggilan hukum.\n\n"
     "Ada yang pernah menerima panggilan sebagai saksi? Boleh cerita pengalamannya di komentar. \U0001f447",
     ["#mitosataufakta", "#hukumacara", "#hukumpidana", "#saksi"]),

    (9, "2026-10-16", "TS Law — Mitos atau Fakta: KTP sebagai Jaminan",
     "KTP ditahan sebagai jaminan utang? Sebaiknya jangan.\n\n"
     "KTP adalah dokumen identitas, bukan surat berharga yang bisa dijadikan jaminan. Menyerahkan identitas asli "
     "tanpa memahami dasar dan risikonya membuka peluang penyalahgunaan data.\n\n"
     "Dicky Andika Hartanto, S.H. mengingatkan hal ini di poster. Lindungi data dan identitas Anda.\n\n"
     "Pernah diminta menyerahkan KTP untuk keperluan pinjaman? Bagaimana Anda menyikapinya? Tulis di komentar. \U0001f447",
     ["#mitosataufakta", "#perlindungandata", "#datapribadi", "#konsumen"]),

    (10, "2026-10-19", "TS Law — Mitos atau Fakta: Tanda Tangan Digital",
     "Tanda tangan digital tidak sah secara hukum? Anggapan ini perlu dikoreksi.\n\n"
     "Tanda tangan elektronik dapat memiliki kekuatan hukum jika dibuat sesuai persyaratan dan ketentuan "
     "peraturan yang berlaku. Kuncinya ada di penyelenggara dan dokumentasinya.\n\n"
     "Sarah Oktavia Prasanti, S.H. menguraikannya di poster ini. Pastikan layanan dan dokumennya terpercaya.\n\n"
     "Anda sudah pernah menandatangani dokumen secara digital? Apa yang paling Anda perhatikan? Komentar. \U0001f447",
     ["#mitosataufakta", "#tandatanganelektronik", "#transaksidigital", "#hukumbisnis"]),

    (11, "2026-10-22", "TS Law — Mitos atau Fakta: Hak Setelah Mengundurkan Diri",
     "Karyawan mengundurkan diri otomatis kehilangan semua hak? Tidak selalu.\n\n"
     "Hak pekerja setelah mengundurkan diri bergantung pada alasan pengunduran diri, masa kerja, ketentuan "
     "hubungan kerja, dan peraturan yang berlaku. Tidak otomatis semua hak hilang.\n\n"
     "Nabila Khalisa Paramita, S.H. menjelaskan hal ini di poster. Periksa hakmu sebelum mengambil keputusan.\n\n"
     "Pernah mengundurkan diri dan masih ada hak yang belum dibayar? Ceritakan di komentar. \U0001f447",
     ["#mitosataufakta", "#hukumketenagakerjaan", "#hakpekerja", "#hubungankerja"]),
]

TAG_DASAR = ["#tslaw", "#titosuprantolawfirm", "#hukumindonesia", "#edukasihukum",
             "#literasihukum", "#konsultasihukum", "#advokatindonesia", "#hakanda"]


def caption(isi, tag_tambahan):
    tags = TAG_DASAR + tag_tambahan
    # guard: hashtag wajib huruf kecil & tanpa mention
    for t in tags:
        assert t == t.lower(), f"hashtag ada huruf besar: {t}"
    assert "@" not in isi and "@" not in " ".join(tags), "ada mention"
    return f"{isi}\n\n{CTA}\n\n{' '.join(tags)}"


def main():
    go = "--go" in sys.argv
    c = get_client()
    for no, tanggal, judul, isi, tag_tambahan in POSTS:
        cap = caption(isi, tag_tambahan)
        url = f"{BASE}tslaw_mitos_fakta_{no:02d}.jpg"
        jam = datetime.fromisoformat(f"{tanggal}T04:00:00+00:00")  # 11:00 WIB
        wib = jam.astimezone(timezone(timedelta(hours=7))).strftime("%Y-%m-%d %H:%M WIB")
        assert all(h == h.lower() for h in cap.split() if h.startswith("#"))
        print(f"\n--- {no:02d} | {wib} | {len(cap)} char | {url.split('/')[-1]}")
        print(f"    {judul}")
        if not go:
            continue
        res = None
        for attempt in range(1, 5):
            try:
                res = c.create_schedule(AKUN, cap, jam.strftime("%Y-%m-%dT%H:%M:%S.000Z"), title=judul,
                                        topic=TOPIC, type_="image",
                                        medias=[{"url": url, "type": "image", "alt": f"tslaw_mitos_fakta_{no:02d}.jpg"}],
                                        replies=[])
                break
            except Exception as e:
                print(f"    ⚠️ attempt {attempt} gagal: {e}")
                time.sleep(12)
        if res is None:
            print(f"    ❌ {no:02d} GAGAL 4x — jangan diulang dari awal, cukup jalankan ulang item ini")
            continue
        sid = res.get("scheduleId") or res.get("_id") or res.get("id")
        chk = c.get_schedule(sid)
        chk = chk.get("doc") or chk
        at = (datetime.fromisoformat(chk["scheduleAt"].replace("Z", "+00:00"))
              .astimezone(timezone(timedelta(hours=7))).strftime("%Y-%m-%d %H:%M"))
        print(f"    ✅ {sid} | status={chk.get('status')} | {at} WIB | media={len(chk.get('medias') or [])} | "
              f"caption={len(chk.get('description') or '')} char")
    if not go:
        print("\n(dry-run — tambahkan --go)")


if __name__ == "__main__":
    main()
