#!/usr/bin/env python3
"""Pasang ulang jadwal yang gagal 23-25 Okt (konten evergreen, bukan story harian).

Sumber: rekap_gagal_7hari.json. Tiap jadwal baru dibuat dengan payload yang SAMA
(judul, caption, topic, medias, replies) hanya scheduleAt yang digeser.
Aturan: 1 konten per hari per akun, lane asli dipertahankan (IG SS 08:30/08:40/11:00,
TSC 17:00 empat kanal, TS Law 09:00 + FB 19:30, Uky quote 08:48 / album 09:00).

Pakai: python3 pasang_ulang_gagal_okt.py [--run]
"""
import sys
from datetime import datetime, timedelta, timezone

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

WIB = timezone(timedelta(hours=7))
RUN = "--run" in sys.argv

# id jadwal gagal → (tanggal WIB, jam WIB)
PETA = {
    # IG SS lane (Kreasi Studiosoft): carousel 08:30, story mirror 08:40, reel 11:00
    "6ac102f61733078385ccaaa7": ("2026-11-01", "08:30"),  # carousel jasa-automasi-marketing
    "6ac102f907008e0e919e881f": ("2026-11-01", "08:40"),  # story mirror automasimarketing
    "6abdf80c07008e0e912271d0": ("2026-11-01", "11:00"),  # reel putih ss_opt2_08
    "6ac103021733078385ccabeb": ("2026-11-02", "08:30"),  # carousel branding-agency-surabaya
    "6ac103061733078385ccacd6": ("2026-11-02", "08:40"),  # story mirror brandingagency
    "6abdf82917330783851e2f09": ("2026-11-02", "11:00"),  # reel biru ss_opt2_09
    "6ac1030f07008e0e919e8b31": ("2026-11-03", "08:30"),  # carousel jasa-ai-agent-indonesia
    "6ac103141733078385ccaff2": ("2026-11-03", "08:40"),  # story mirror aiagent
    "6abdf84717330783851e392d": ("2026-11-03", "11:00"),  # reel putih ss_opt2_14

    # TSC carousel 17:00 empat kanal, urut p23 -> p24 -> p25
    "6acf521a3b7404ace34636df": ("2026-11-01", "17:00"),  # Kutil kulit, IG
    "6acf52263b7404ace34638ee": ("2026-11-01", "17:00"),  # Kutil kulit, Threads
    "6acf52323b7404ace3463d3d": ("2026-11-01", "17:00"),  # Kutil kulit, FB
    "6acf523d3b7404ace346404b": ("2026-11-01", "17:00"),  # Kutil kulit, LinkedIn
    "6acf524876bea2decc447dd8": ("2026-11-02", "17:00"),  # Bekas jerawat Krian, IG
    "6acf52533b7404ace346465b": ("2026-11-02", "17:00"),  # Bekas jerawat Krian, Threads
    "6acf525e3b7404ace346492e": ("2026-11-02", "17:00"),  # Bekas jerawat Krian, FB
    "6acf526976bea2decc4487c2": ("2026-11-02", "17:00"),  # Bekas jerawat Krian, LinkedIn
    "6acf52743b7404ace3464ff5": ("2026-11-03", "17:00"),  # 4 grade jerawat, IG
    "6acf53aa3b7404ace346c726": ("2026-11-03", "17:00"),  # 4 grade jerawat, Threads
    "6acf53b43b7404ace346ca83": ("2026-11-03", "17:00"),  # 4 grade jerawat, FB
    "6acf53bf3b7404ace346cf5a": ("2026-11-03", "17:00"),  # 4 grade jerawat, LinkedIn

    # TS Law carousel 7 anggapan soal proses hukum
    "6ac46f6b8bb99cea57a73101": ("2026-10-27", "09:00"),  # Threads
    "6ac46f6cefef33b90884212e": ("2026-10-27", "09:00"),  # IG
    "6ac46f6defef33b90884213c": ("2026-10-27", "19:30"),  # FB

    # Uky
    "6ac48adcefef33b9088a326d": ("2026-10-28", "09:00"),  # album 10 Langkah Mulai Usaha Online
    "6ac497e3efef33b9088d6322": ("2026-10-30", "09:00"),  # album 6 Cara Mengubah Pengikut
    "6ab808a874292ea3cbcbce05": ("2026-10-27", "08:48"),  # quote Feedback Adalah Hadiah
    "6ab959f39a8564a8eba3ea37": ("2026-10-31", "08:48"),  # quote Fokus ke Satu Niche

    # StudioSoft quote
    "6aaa1ae99aa606c3bd690d6e": ("2026-10-28", "08:00"),  # Kenapa Kami Pilih Jalan Berbeda
}

KOSONGKAN = {"_id", "id", "createdAt", "updatedAt", "__v", "status", "postId", "account", "userId"}

c = get_client()
hasil = []
for sid, (tgl, jam) in PETA.items():
    lama = c.get_schedule(sid) or {}
    acc = lama.get("account") or {}
    nama = f"{acc.get('name')} [{acc.get('type')}]"
    if not lama.get("accountId"):
        print(f"  ❌ {sid} tidak terbaca")
        continue
    dt_wib = datetime.strptime(f"{tgl} {jam}", "%Y-%m-%d %H:%M").replace(tzinfo=WIB)
    at = (dt_wib - timedelta(hours=7)).strftime("%Y-%m-%dT%H:%M:%S.000Z")
    payload = {k: v for k, v in lama.items() if k not in KOSONGKAN}
    payload["scheduleAt"] = at
    # 26 Okt 2026: dua album Uky gagal dengan "The parameter image_url is required" karena
    # field type di tiap media KOSONG. Repliz hanya mengirim image_url kalau type terisi.
    for mm in payload.get("medias") or []:
        if not mm.get("type"):
            mm["type"] = "video" if str(mm.get("url", "")).lower().endswith((".mp4", ".mov")) else "image"
    print(f"  {dt_wib:%d %b %H:%M} WIB | {nama} | {str(lama.get('title'))[:52]} | {len(payload.get('medias') or [])} media")
    if not RUN:
        continue
    baru = c.create_schedule(
        lama["accountId"],
        lama.get("description") or "",
        at,
        title=lama.get("title") or "",
        topic=lama.get("topic") or "",
        type_=lama.get("type") or "text",
        medias=payload.get("medias") or [],
        replies=payload.get("replies") or [],
        meta=lama.get("meta"),
        additional_info=lama.get("additionalInfo"),
    )
    sid_baru = (baru or {}).get("scheduleId") or (baru or {}).get("_id")
    hasil.append((sid_baru, sid, dt_wib, nama))
    print(f"     → {'OK ' + str(sid_baru) if sid_baru else '❌ ' + str(baru)[:120]}")

print(f"\ntotal: {len(PETA)} | {'dibuat: ' + str(len(hasil)) if RUN else 'dry-run, tambahkan --run'}")
if RUN and hasil:
    with open("catatan/pasang_ulang_gagal_okt.json", "w") as f:
        import json
        json.dump([{"baru": a, "lama": b, "waktu_wib": d.strftime("%Y-%m-%d %H:%M"), "akun": n} for a, b, d, n in hasil], f, indent=1, ensure_ascii=False)
    print("catatan: catatan/pasang_ulang_gagal_okt.json")
