#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""IG TSLAW harian — 1 posting/hari, 11:00 WIB (04:00Z), mulai Senin 14 Sep 2026.

Stok: desain TS Law yang BELUM pernah tayang. Penomoran file = nomor SUMBER di
tslaw_desain/desain_NN.jpg (seri lama tslaw_desain_NN.jpg di Repliz punya OFFSET +1:
label N == sumber N+1). Yang sudah tayang (sumber): 07..23 + 25..30 lewat seri lama;
sumber 24 = template KOSONG (jadwal 31 Agu error) → jangan dipakai.
15 Sep dilewati karena sudah ada carousel Pinjol 13:00 WIB (maks 1 post/hari).
IDEMPOTEN: skip kalau media sudah ada di jadwal akun ini.
"""
import sys, os, json, re, shutil, subprocess, urllib.request, urllib.parse
from PIL import Image
sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import HEADERS, BASE

IG_TSLAW = "6a76a54d62caae1e04f30968"
WS = "/home/mantapman/.hermes/profiles/atun/workspace"
SRC = f"{WS}/tslaw_desain"
DST = f"{WS}/openclaw-img"
IMG = "https://mantapserver.tail3947bb.ts.net/openclaw-img/"

CTA = ("\n\nButuh pendampingan hukum? Konsultasikan masalah hukum Anda dengan "
       "Tito Suprianto Law Firm: https://tslaw.id\n📲 WhatsApp: +62 819-0922-2026")

HASHTAG = ("#tslaw #titosuprantolawfirm #hukumindonesia #edukasihukum #literasihukum "
           "#hukumbisnis #konsultasihukum #advokatindonesia #hakanda #umkmindonesia")

# (tanggal WIB, nomor sumber desain, judul, caption inti)
QUEUE = [
    (14, 30, "TS Law — Baca Dulu Sebelum Tanda Tangan",
     """Sebelum menandatangani dokumen apa pun, pastikan Anda memahami setiap detailnya. Tanda tangan bukan sekadar formalitas — di situ hak, kewajiban, dan risiko Anda ikut terikat. ✍️

YANG PERLU DIPERIKSA:
• Pasal penting — pahami hak, pembatasan, dan konsekuensi di setiap pasal
• Tenggat waktu — jangan lewatkan batas waktu yang dapat merugikan Anda
• Denda — pahami besaran denda dan kondisi apa yang memicunya
• Kewajiban — ketahui apa yang menjadi kewajiban Anda sebelum sepakat

Satu menit membaca bisa mencegah banyak masalah. Jangan terburu-buru: baca dengan teliti, dan konsultasikan kalau ada keraguan.

Pernah hampir menandatangani kontrak yang ternyata merugikan? Atau punya pengalaman soal klausul yang bikin repot? Cerita di kolom komentar, kita bahas bareng. 👇"""),

    (16, 6, "TS Law — Karya Diciptakan, Hak Harus Dijaga",
     """Karya diciptakan, hak harus dijaga. 🎨

Pencatatan hak cipta membantu memperkuat BUKTI kepemilikan karya Anda. Ketika terjadi sengketa, yang bisa menunjukkan bukti paling kuat biasanya berada di posisi yang lebih aman.

Banyak kreator dan bisnis baru sadar pentingnya perlindungan setelah karyanya dipakai pihak lain tanpa izin — padahal proses pencatatan bisa dilakukan sejak awal, jauh sebelum masalah muncul.

Kalau karya Anda sendiri dipakai orang lain tanpa izin, apa langkah pertama yang Anda lakukan? Tulis pendapat atau pengalaman Anda di kolom komentar. 👇"""),

    (17, 5, "TS Law — Data Pelanggan Bukan Untuk Disebar",
     """Data pelanggan bukan untuk disebar. 🔒

Privasi adalah bagian dari profesionalisme. Data pelanggan Anda bukan aset bebas pakai — ada tanggung jawab hukum di baliknya.

YANG PERLU DIPERHATIKAN:
• Kelola data pribadi pelanggan dengan hati-hati
• Jangan bagikan data pelanggan tanpa izin
• Simpan data dengan aman, lindungi dari risiko kebocoran

Bagi UMKM dan bisnis yang menyimpan data kontak, alamat, atau riwayat transaksi pelanggan, langkah kecil seperti membatasi akses dan memakai penyimpanan yang aman bisa sangat mengurangi risiko.

Menurut Anda, sejauh mana bisnis kecil perlu mengurus perlindungan data pelanggan? Diskusi di komentar, yuk. 👇"""),

    (18, 4, "TS Law — Legal Checklist Bisnis Baru",
     """Legal checklist bisnis baru — rapikan fondasi hukum sejak hari pertama. ✅

Banyak pemilik usaha memulai dari semangat dan produk yang bagus, lalu administrasi legalnya tertinggal. Efeknya baru terasa saat bisnis makin besar: mau ikut tender, ajukan kredit, atau masuk ke kerja sama dengan perusahaan besar — semua minta kelengkapan legal.

CHECKLIST DASARNYA:
☑ Legalitas dasar usaha
☑ NIB
☑ Izin & perizinan usaha
☑ Perjanjian kerja sama
☑ Pencatatan dokumen sejak awal

Bisnis aman, langkah nyaman, tumbuh berkelanjutan.

Kalau Anda merintis bisnis sekarang, bagian legal mana yang paling bikin bingung: pendirian badan usaha, NIB, atau perjanjian kerja sama? Tulis di komentar. 👇"""),

    (19, 3, "TS Law — Sebelum Daftar Merek, Cek Dahulu",
     """Sebelum daftar merek, cek dahulu. 🔎

Pastikan nama atau logo bisnis Anda tidak mirip dengan merek yang sudah terdaftar. Penelitian sederhana sebelum mendaftar bisa mencegah penolakan permohonan — dan yang lebih mahal: potensi konflik dengan pemilik merek lain.

Kenapa perlu dicek lebih dulu?
• Menghindari penolakan karena ada kemiripan
• Menghemat waktu dan biaya pendaftaran
• Menghindari risiko sengketa di kemudian hari
• Membuat strategi pendaftaran kelas merek jadi lebih rapi

Banyak bisnis baru tahu nama yang dipakainya bermasalah setelah brand-nya mulai dikenal. Jadi lebih baik dicek sejak awal.

Kalau Anda punya cerita soal merek — pernah dicek dulu atau baru ketahuan belakangan? Tulis di komentar. 👇"""),
]


def list_ig():
    docs, page = [], 1
    while True:
        q = urllib.parse.urlencode({"page": page, "limit": 100})
        req = urllib.request.Request(f"{BASE}/public/schedule?{q}", headers=HEADERS)
        with urllib.request.urlopen(req, timeout=60) as r:
            d = json.load(r)
        docs += d.get("docs", d.get("data", []))
        if not d.get("hasNextPage") or not docs:
            break
        page += 1
    return [s for s in docs if s.get("accountId") == IG_TSLAW]


existing = list_ig()
blob_existing = json.dumps(existing).lower()
print(f"jadwal IG TSLAW sekarang: {len(existing)}")

ok = 0
for tgl, nomor, title, cap in QUEUE:
    fn = f"tslaw_edu_{nomor:02d}.jpg"
    src = f"{SRC}/desain_{nomor:02d}.jpg"
    cap_full = cap + CTA + "\n\n" + HASHTAG
    bad = [t for t in re.findall(r"#(\w+)", cap_full) if t != t.lower()]
    assert not bad, f"hashtag huruf besar: {bad}"
    assert not re.findall(r"@\w+", cap_full), "ada mention"

    if fn.lower() in blob_existing:
        print(f"⏭️  {tgl} Sep — {fn} sudah ada di jadwal → SKIP")
        continue
    # copy media
    shutil.copyfile(src, f"{DST}/{fn}")
    # verifikasi media benar-benar bisa diambil lewat jalur INTERNET (funnel)
    url = IMG + fn
    codes = []
    for extra in ([], ["--resolve", "mantapserver.tail3947bb.ts.net:443:103.84.155.153"],
                  ["--resolve", "mantapserver.tail3947bb.ts.net:443:103.84.155.217"]):
        r = subprocess.run(["curl", "-s", "-o", "/dev/null", "-w", "%{http_code}", "--max-time", "25"] + extra + [url],
                           capture_output=True, text=True)
        codes.append(r.stdout.strip())
    if any(c != "200" for c in codes):
        print(f"❌ {tgl} Sep — {fn} media tidak 200 di semua jalur {codes} → SKIP create")
        continue
    # validasi JPEG masih utuh
    Image.open(f"{DST}/{fn}").verify()
    at = f"2026-09-{tgl:02d}T04:00:00.000Z"   # 11:00 WIB
    payload = {
        "accountId": IG_TSLAW,
        "title": title,
        "description": cap_full,
        "topic": "Edukasi Hukum",
        "type": "image",
        "medias": [{"url": IMG + fn, "type": "image", "alt": fn[:-4]}],
        "scheduleAt": at,
        "replies": [],
    }
    req = urllib.request.Request(f"{BASE}/public/schedule", data=json.dumps(payload).encode(),
                                 headers={**HEADERS, "Content-Type": "application/json"})
    try:
        with urllib.request.urlopen(req, timeout=45) as r:
            res = json.load(r)
        sid = res.get("scheduleId") or res.get("_id") or res.get("id")
        print(f"✅ {tgl} Sep 11:00 WIB — desain_{nomor:02d} → {fn} | id={sid} | caption {len(cap_full)} char")
        ok += 1
    except Exception as e:
        print(f"❌ {tgl} Sep — desain_{nomor:02d}: {e}")

print(f"\n📊 {ok} jadwal dibuat")
