#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Ganti media jadwal IG ksatriadojo (video Muhammad Bintang) dari versi LANDSCAPE
ke versi 9:16 blur-pad — perintah Bos 15 Sep 2026: "Untuk yang konten Bintang
pilih no 1 aja" (catatan no. 1 = bikinkan versi blur-pad 9:16 biar full frame).

Jadwal: 6aa8ae9b88a23118daaefae6 (22 Sep 2026 09:00 WIB) — status pending,
jadi media boleh di-PUT (jadwal error TIDAK bisa di-PUT).
File lama tetap ada di server (URL lama tidak diubah/dihapus).
"""
import os, sys, subprocess

sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from repliz_client import ReplizClient, ACC, IMG_BASE_URL

SID = "6aa8ae9b88a23118daaefae6"
VIDEO = "dojo_bintang_yogyakarta_01_9x16.mp4"
THUMB = "dojo_bintang_yogyakarta_01_9x16_thumb.jpg"
INGRESS = ["103.84.155.153", "103.84.155.217"]


def fetch_all(c):
    docs, page = [], 1
    while True:
        r = c.get_schedules(page=page, limit=100)
        d = r.get("docs") or r.get("data") or []
        docs += d
        if not d or page >= (r.get("totalPages") or 1):
            break
        page += 1
    return docs


def verify(url):
    for ip in INGRESS:
        r = subprocess.run(["curl", "-s", "-o", "/dev/null", "-w", "%{http_code}",
                            "--max-time", "30", "--resolve",
                            f"mantapserver.tail3947bb.ts.net:443:{ip}", url],
                           capture_output=True, text=True)
        print(f"    {ip}: {r.stdout.strip()}")
        if r.stdout.strip() != "200":
            return False
    return True


def main():
    apply = "--apply" in sys.argv
    c = ReplizClient()
    cur = c.get_schedule(SID)
    doc = cur.get("data") if isinstance(cur, dict) and "data" in cur else cur
    if isinstance(doc, list):
        doc = doc[0]
    print("judul  :", doc.get("title"))
    print("status :", doc.get("status"), "| scheduleAt:", doc.get("scheduleAt"))
    print("media  :", [m.get("url") for m in (doc.get("medias") or [])])

    url_v = f"{IMG_BASE_URL}/openclaw-img/{VIDEO}"
    url_t = f"{IMG_BASE_URL}/openclaw-img/{THUMB}"
    print("URL baru:", url_v)
    if not (verify(url_v) and verify(url_t)):
        print("❌ URL baru belum 200 di semua ingress"); return 1

    if any((m.get("url") or "").endswith(VIDEO) for m in (doc.get("medias") or [])):
        print("ℹ️  media sudah versi 9:16 → tidak perlu PUT"); return 0
    if not apply:
        print("🧪 DRY RUN — tambahkan --apply untuk PUT media")
        return 0

    payload = {
        "accountId": doc.get("accountId") or ACC.DOJO_KSATRIA_IG,
        "title": doc.get("title") or "",
        "description": doc.get("description") or "",
        "topic": doc.get("topic") or "Karate",
        "type": doc.get("type") or "video",
        "medias": [{"type": "video", "url": url_v, "thumbnail": url_t}],
        "scheduleAt": doc.get("scheduleAt"),
        "replies": doc.get("replies") or [],
    }
    r = c._request("PUT", f"/public/schedule/{SID}", payload)
    print("PUT →", str(r)[:200])

    # verifikasi ULANG dari API (fetch baru)
    for x in fetch_all(c):
        if x.get("_id") == SID:
            print("🔁 hasil:", x.get("status"), x.get("scheduleAt"),
                  [m.get("url") for m in (x.get("medias") or [])])
            ok = any(VIDEO in (m.get("url") or "") for m in (x.get("medias") or []))
            print("✅ media 9:16 TERPASANG" if ok else "⚠️ media belum berubah")
            return 0 if ok else 1
    print("⚠️ jadwal tidak ditemukan di fetch ulang"); return 1


if __name__ == "__main__":
    sys.exit(main())
