#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Geser carousel mitos10 TS Law dari Senin 12 Okt ke Rabu 14 Okt.

Catatan API: PUT /public/schedule/<id> butuh `medias` ikut dikirim. Kalau cuma
`scheduleAt` yang dikirim, server balas 500 "Cannot read properties of undefined".
Jadi payload = medias asli + scheduleAt baru.

Pakai: python3 geser_carousel_mitos10_ke_rabu.py         (dry run)
       python3 geser_carousel_mitos10_ke_rabu.py --run   (eksekusi)
"""
import json
import sys
import urllib.request

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

GESER = [
    ("Threads carousel", "6ac3539707008e0e9104842f", "2026-10-14T02:00:00.000Z"),
    ("IG carousel", "6ac35397173307838558141e", "2026-10-14T02:00:00.000Z"),
    ("FB carousel", "6ac3539707008e0e91048445", "2026-10-14T12:30:00.000Z"),
]
MODE = "run" if "--run" in sys.argv else "dry"


def ambil(sid):
    return json.load(urllib.request.urlopen(urllib.request.Request(
        f"{BASE}/public/schedule/{sid}", headers=HEADERS), timeout=60))


for label, sid, at in GESER:
    j = ambil(sid)
    media = j.get("medias") or []
    print(f"{label:16} id={sid} | sekarang {j.get('scheduleAt')} | {len(media)} media "
          f"| {j.get('status')} | {(j.get('title') or '')[:40]}")
    if MODE != "run":
        print(f"   [DRY] PUT -> {at} (medias {len(media)} ikut dikirim)")
        continue
    payload = {
        "accountId": j.get("accountId"),
        "title": j.get("title") or "",
        "description": j.get("description") or "",
        "topic": j.get("topic") or "",
        "type": j.get("type"),
        "medias": media,
        "scheduleAt": at,
        "replies": j.get("replies") or [],
    }
    req = urllib.request.Request(f"{BASE}/public/schedule/{sid}",
                                 data=json.dumps(payload).encode(),
                                 headers={**HEADERS, "Content-Type": "application/json"},
                                 method="PUT")
    try:
        with urllib.request.urlopen(req, timeout=60) as r:
            kode = r.status
        b = ambil(sid)
        print(f"   OK -> {b.get('scheduleAt')} | {b.get('status')} {b.get('type')} "
              f"| {len(b.get('medias') or [])} media | caption {len(b.get('description') or '')} char")
    except Exception as e:
        body = getattr(e, "read", lambda: b"")()
        print(f"   GAGAL: {e} {body[:200]}")
