#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""TS Law — video "Kontrak Tanpa Materai" (kiriman Bos 18 Sep 2026).

Tayang 20 Sep 2026 di 3 akun TS Law (LinkedIn TETAP STOP atas perintah Bos 10 Sep):
  Threads 09:00 WIB (02:00Z) · IG 11:00 WIB (04:00Z) · FB 19:30 WIB (12:30Z)
IDEMPOTEN: skip kalau nama file video sudah ada di jadwal akun itu.
Caption: verbatim dari Bos (572 char). Threads dipendekkan ke <=500 char.
"""
import sys, json, subprocess, urllib.request, urllib.parse

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

IG = "6a76a54d62caae1e04f30968"
THREADS = "6a35f8b7c5ff4ce3a322b2ed"
FB = "6a3b41d1c5ff4ce3a32753e8"

IMG = "https://mantapserver.tail3947bb.ts.net/openclaw-img/"
FN = "tslaw_video_materai_0918_h264.mp4"
URL = IMG + FN

CAP = """Pernah nggak sih kamu dengar anggapan kalau surat perjanjian atau kontrak yang nggak pakai materai itu nggak sah di mata hukum? 🤔
Faktanya, salah besar! Materai itu cuma instrumen bea dokumen, bukan syarat utama sahnya sebuah kontrak menurut KUHPerdata.
Swipe atau tonton videonya sampai habis buat tahu dasar hukum lengkapnya ya! Jangan lupa save video ini supaya nggak salah kaprah.
Kira-kira mitos hukum apa lagi nih yang sering kamu dengar? Tulis di kolom komentar ya! 👇
#HukumIndonesia #KontrakKerja #PerjanjianSah #EdukasiHukum #LawyerIndonesia #TitoSupriantoLawFirm"""

CAP_THREADS = """Pernah nggak sih kamu dengar anggapan kalau surat perjanjian atau kontrak yang nggak pakai materai itu nggak sah di mata hukum? 🤔

Faktanya salah besar! Materai cuma instrumen bea dokumen, bukan syarat sahnya sebuah kontrak menurut KUHPerdata.

Tonton videonya sampai habis buat tahu dasar hukumnya ya!

Mitos hukum apa lagi yang sering kamu dengar? Tulis di komentar 👇

#HukumIndonesia #KontrakKerja #PerjanjianSah #EdukasiHukum #TitoSupriantoLawFirm"""

JOBS = [
    ("Threads", THREADS, "2026-09-20T02:00:00.000Z", CAP_THREADS, "TS Law — Kontrak Tanpa Materai"),
    ("IG",      IG,      "2026-09-20T04:00:00.000Z", CAP,         "TS Law — Kontrak Tanpa Materai"),
    ("FB",      FB,      "2026-09-20T12:30:00.000Z", CAP,         "TS Law — Kontrak Tanpa Materai"),
]


def all_schedules():
    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 docs


# 1) validasi caption
assert len(CAP) <= 2200, f"caption kepanjangan: {len(CAP)}"
assert len(CAP_THREADS) <= 500, f"caption Threads {len(CAP_THREADS)} > 500"
for label, cap in (("full", CAP), ("threads", CAP_THREADS)):
    assert "@" not in cap, f"ada mention di caption {label}"
print(f"caption: full {len(CAP)} char · Threads {len(CAP_THREADS)} char")

# 2) validasi media live lewat funnel
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", "40", "-I"] + extra + [URL],
                       capture_output=True, text=True)
    codes.append(r.stdout.strip())
print("media HEAD:", codes)
if any(c != "200" for c in codes):
    sys.exit(f"❌ media tidak 200 di semua jalur {codes} → batal")

# 3) buat jadwal
existing = all_schedules()
ok = 0
for label, acc, at, cap, title in JOBS:
    already = [s for s in existing if s.get("accountId") == acc
               and FN.lower() in json.dumps(s).lower()]
    if already:
        print(f"⏭️  {label}: {FN} sudah ada di jadwal → SKIP (id {already[0].get('_id') or already[0].get('id')})")
        continue
    payload = {
        "accountId": acc,
        "title": title,
        "description": cap,
        "topic": "Edukasi Hukum",
        "type": "video",
        "medias": [{"url": URL, "type": "video", "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=60) as r:
            res = json.load(r)
        sid = res.get("scheduleId") or res.get("_id") or res.get("id")
        print(f"✅ {label} | {at} | caption {len(cap)} char | id={sid}")
        ok += 1
    except Exception as e:
        body = getattr(e, "read", lambda: b"")()
        print(f"❌ {label}: {e} {body[:300]}")

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