#!/usr/bin/env python3
"""Re-air video 'Nasi Ayam Goreng Kampung' ke IG + Threads (yang gagal/belum dapat).
IG 11 Sep error: 'Video download failed ... Operation timed out' (file 83MB/HEVC)
-> pakai hasil re-encode H.264 17.9MB (soto_nasi_ayam_goreng_01_ig.mp4).
Idempoten: skip kalau media sudah ada di pending."""
import json, sys, urllib.request
from datetime import datetime, timedelta, timezone

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

WIB = timezone(timedelta(hours=7))
VIDEO = "https://mantapserver.tail3947bb.ts.net/openclaw-img/soto_nasi_ayam_goreng_01_ig.mp4"
FNAME = "soto_nasi_ayam_goreng_01_ig.mp4"

CAP_IG = """Menu yang bikin kangen masakan rumah: Nasi Ayam Goreng Kampung! 🍗🍚

Ayam kampung goreng yang gurih, sambal yang bikin nagih, plus nasi hangat — kombinasi sederhana yang bikin makan makin mantap. Digoreng fresh pas pesanan masuk, jadi tetap hangat dan kriuk.

Ga perlu ke Semarang, cukup ke Pagerwojo Sidoarjo! 😋

📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo
⏰ Buka Setiap Hari: 10.00 - 21.00 WIB
📲 081230777713

Kamu tim mana nih — soto, nasgor babat, atau nasi ayam goreng kampung? Cerita di komentar ya! 👇

#sotosemarangpakotto #nasiayamgoreng #ayamkampung #kulinersidoarjo #kulinermalam #warungsemarang #nasigoreng"""

CAP_TH = """Menu yang bikin kangen masakan rumah: Nasi Ayam Goreng Kampung! 🍗🍚

Ayam kampung goreng gurih, sambal bikin nagih, plus nasi hangat — digoreng fresh pas pesanan masuk.

Ga perlu ke Semarang, cukup ke Pagerwojo Sidoarjo! 😋

📍 Jl. Graha Anggrek Mas No. C-16, Ruko Pagerwojo, Buduran, Sidoarjo
⏰ Buka Setiap Hari: 10.00 - 21.00 WIB

@kulinersidoarjo @sidoarjo

Kamu tim mana — soto, nasgor babat, atau nasi ayam goreng? Cerita di komentar ya! 👇

#sotosemarangpakotto #nasiayamgoreng #ayamkampung"""

TARGETS = [
    ("6a86d6e962caae1e04ffedaa", "IG", CAP_IG),
    ("6a86d84b62caae1e04fff12c", "Threads", CAP_TH),
]


def list_sched(accid):
    out = []
    for p in range(1, 80):
        req = urllib.request.Request(f"{BASE}/public/schedule?page={p}&limit=100", headers=HEADERS)
        with urllib.request.urlopen(req, timeout=40) as r:
            doc = json.load(r)
        docs = doc.get("docs", [])
        if not docs:
            break
        for d in docs:
            if d.get("accountId") == accid and (d.get("status") or "").lower() == "pending":
                out.append(d)
        if p >= doc.get("totalPages", 1):
            break
    return out


def alias(url):
    return url.split("?")[0].rstrip("/").split("/")[-1].lower()


# slot: 17:30 WIB hari ini (17:00 sudah lewat beberapa menit)
now = datetime.now(WIB)
target = now.replace(hour=17, minute=30, second=0, microsecond=0)
if target <= now:
    print(f"⚠️ 17:30 WIB sudah lewat ({now:%H:%M}), pakai slot berikutnya 20:00 WIB")
    target = now.replace(hour=20, minute=0, second=0, microsecond=0)
    if target <= now:
        target = (now + timedelta(days=1)).replace(hour=5, minute=0, second=0, microsecond=0)
at = target.astimezone(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.000Z")
print(f"Target tayang: {target:%d %b %Y %H:%M} WIB  ({at})")

ok = 0
for accid, nm, cap in TARGETS:
    if nm == "Threads" and len(cap) > 500:
        print(f"  ❌ Threads caption {len(cap)} char > 500 — batal")
        continue
    pend = list_sched(accid)
    existing = [d for d in pend if any(alias(m.get("url") or "") == FNAME.lower() for m in (d.get("medias") or []))]
    if existing:
        print(f"  ⏭  {nm}: sudah ada jadwal ({existing[0].get('_id') or existing[0].get('id')}) di {existing[0].get('scheduleAt')} — SKIP create")
        continue
    payload = {
        "accountId": accid,
        "title": f"Soto Pak Otto — Nasi Ayam Goreng Kampung ({nm})",
        "description": cap,
        "topic": "Menu Pak Otto",
        "type": "video",
        "medias": [{"url": VIDEO, "type": "video", "alt": FNAME}],
        "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=90) as r:
            res = json.load(r)
        sid = res.get("scheduleId") or res.get("_id") or res.get("id")
        if not sid:
            # cek ulang dari API
            pend2 = list_sched(accid)
            hit = [d for d in pend2 if any(alias(m.get("url") or "") == FNAME.lower() for m in (d.get("medias") or []))]
            sid = (hit[0].get("_id") or hit[0].get("id")) if hit else None
        print(f"  ✅ {nm}: dibuat {sid} | {target:%H:%M} WIB | caption {len(cap)} char")
        ok += 1
    except Exception as e:
        print(f"  ❌ {nm}: GAGAL — {e}")
print(f"\nSelesai: {ok} jadwal dibuat.")
