#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""post_video_fotografi_uky.py — post VIDEO fotografi (Seoul) ke Threads @ukyhandoko.

Aset dari Bos (Telegram 4 Okt 2026, video_9c66abeffa3a.mp4, 64 dtk, 464x848, H.264/AAC,
13,4 MB) → disalin ke openclaw-img/uky_seoul_fotografi_01.mp4 dan diverifikasi 200 di
KEDUA ingress funnel sebelum create.

Catatan penting: jadwal VIDEO di akun Threads lewat Repliz BELUM PERNAH sukses
(satu-satunya percobaan: tslaw_threads 20 Sep 2026, error UNKNOWN). Karena itu post ini
sekaligus jadi UJI — script mencetak id-nya supaya statusnya bisa dicek setelah tayang.

Pakai: python3 post_video_fotografi_uky.py            (dry run)
       python3 post_video_fotografi_uky.py --run
"""
import sys, json, datetime
sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import ReplizClient, ACC
from bank_fotografi_uky import validasi

WIB = datetime.timezone(datetime.timedelta(hours=7))
RUN = "--run" in sys.argv
TOPIC = "Fotografi & Visual"
TGL = datetime.date(2026, 10, 5)
JAM = 5                      # 05:00 WIB (slot kosong paling pagi)
VIDEO = "https://mantapserver.tail3947bb.ts.net/openclaw-img/uky_seoul_fotografi_01.mp4"

CAPTION = """Bawa kamera ke Seoul, ternyata yang dilatih bukan teknik.

Di gang Bukchon saya berdiri lama cuma nunggu satu frame tanpa orang lewat. Di kereta, saya belajar memotret tanpa mengganggu orang di sekitar.

Dari situ saya paham: foto bagus lahir dari kesabaran, bukan kecepatan. Cara saya kerja ikut berubah.

Kalau jalan-jalan bawa kamera, kamu lebih sering dapat momen candid atau foto yang diatur? Ceritakan di komentar. 📷

#fotografi #streetphotography #seoul #kesabaran"""

cli = ReplizClient()


def cek_sudah_ada():
    page = 1
    while True:
        d = cli.get(f"/public/schedule?page={page}&limit=100")
        for s in d.get("docs") or []:
            if s.get("accountId") != ACC.UKY_THREADS:
                continue
            iso = s.get("scheduleAt")
            if not iso:
                continue
            dt = datetime.datetime.fromisoformat(iso.replace("Z", "+00:00")).astimezone(WIB)
            if dt.date() == TGL and dt.hour == JAM and s.get("status") in ("pending", "processing", "draft"):
                return s
            if s.get("topic") == TOPIC and "video" in (s.get("title") or "").lower() and s.get("status") in ("pending", "processing", "draft"):
                return s
        if page >= (d.get("totalPages") or 1):
            break
        page += 1
    return None


def utama():
    print(f"caption: {len(CAPTION)} char")
    m = validasi(CAPTION)
    if m:
        print("❌ caption gagal validasi:", m)
        return
    print("✅ caption lolos validasi (panjang, CTA ekor, hashtag kecil, 0 mention, 0 CJK)")

    lama = cek_sudah_ada()
    if lama:
        print(f"⏭️  slot {TGL} {JAM}:00 WIB sudah terisi (id={lama.get('id')}, status={lama.get('status')}) — skip")
        return

    schedule_at = cli.make_schedule(TGL.year, TGL.month, TGL.day, JAM, 0, wib=True)
    judul = f"uky {TOPIC} (video Seoul) {TGL.isoformat()}"
    print(f"— {TGL} {JAM}:00 WIB ({schedule_at}) | type=video | {judul}")
    print(f"  media: {VIDEO}")
    if not RUN:
        print("\n=== DRY RUN (tambah --run untuk eksekusi) ===")
        return

    res = cli.create_schedule(ACC.UKY_THREADS, CAPTION, schedule_at, title=judul, topic=TOPIC,
                              type_="video", medias=[cli.make_media(VIDEO, "video")], replies=[])
    sid = res.get("scheduleId") or res.get("_id") or res.get("id")
    print("   respons create:", res)
    if not sid:
        print("   ❌ create gagal")
        return
    chk = cli.get_schedule(sid)
    s = chk.get("schedule") or chk
    dt = datetime.datetime.fromisoformat(s["scheduleAt"].replace("Z", "+00:00")).astimezone(WIB)
    print(f"   ✅ id={sid}\n   status={s.get('status')} · tayang={dt:%d %b %Y %H:%M} WIB · "
          f"type={s.get('type')} · media={[mm.get('type') for mm in (s.get('medias') or [])]} · "
          f"panjang caption={len(s.get('description') or '')} · replies={len(s.get('replies') or [])}")
    json.dump({"id": sid, "scheduleAt": s.get("scheduleAt"), "status": s.get("status"),
               "caption_len": len(s.get("description") or ""),
               "dibuat": datetime.datetime.now(WIB).isoformat()},
              open("/home/mantapman/.hermes/profiles/atun/workspace/fotografi_uky_video.json", "w"), indent=1)


if __name__ == "__main__":
    utama()
