#!/usr/bin/env python3
"""Repliz: aktifkan draf parkir LEIT (2099) menjadi slot nyata, disebar per hari — 1 draf per kanal per hari.
Pakai --apply untuk benar-benar mengubah jadwal."""
import json, sys, time
from datetime import datetime, timedelta, timezone

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

NAMA = {getattr(ACC, n): n for n in dir(ACC) if not n.startswith("_")}
client = get_client()

# jam tayang per kanal (WIB) — dibuat berbeda supaya tidak menumpuk di menit yang sama
JAM = {"LEIT_FB": 9, "LEIT_IG": 12, "LEIT_LINKEDIN": 8, "LEIT_TIKTOK": 19}

print("=== mengumpulkan draf parkir ===")
semua = []
page = 1
while True:
    d = client.get_schedules(page=page, limit=100)
    docs = d.get("docs", []) if isinstance(d, dict) else []
    semua += docs
    if len(docs) < 100:
        break
    page += 1
print(f"total jadwal: {len(semua)}")

parkir = {}
for s in semua:
    if s.get("status") != "pending":
        continue
    if str(s.get("scheduleAt") or "") < "2090":
        continue
    akun = NAMA.get(s.get("accountId"), s.get("accountId"))
    parkir.setdefault(akun, []).append(s)

total = sum(len(v) for v in parkir.values())
print(f"draf parkir: {total}")
for a, lst in sorted(parkir.items()):
    print(f"   {a:<18} {len(lst)}")

print("\n=== rencana jadwal (disusun, belum diterapkan) ===")
mulai = datetime.now(timezone.utc).date() + timedelta(days=1)
rencana = []
for akun, lst in sorted(parkir.items()):
    jam_wib = JAM.get(akun, 10)
    # urutkan draf berdasarkan id supaya urutannya tetap
    lst = sorted(lst, key=lambda s: str(s.get("_id")))
    for i, s in enumerate(lst):
        hari = mulai + timedelta(days=i)
        jam_utc = (jam_wib - 7) % 24
        geser_hari = 0 if jam_wib - 7 >= 0 else 1
        slot = datetime(hari.year, hari.month, hari.day, jam_utc, 0, 0, tzinfo=timezone.utc) + timedelta(days=geser_hari)
        rencana.append({"akun": akun, "id": s.get("_id"), "slot": slot.strftime("%Y-%m-%dT%H:%M:%S.000Z"),
                        "wib": (slot + timedelta(hours=7)).strftime("%d %b %H:%M WIB"),
                        "jenis": s.get("type"), "desc": str(s.get("description"))[:60].replace("\n", " ")})

for r in rencana:
    print(f"   {r['slot'][:16]} (={(r['wib'])}) | {r['akun']:<14} | {str(r['jenis'] or '?'):<6} | {r['desc']}")

if "--apply" not in sys.argv:
    print(f"\n(dry run — {len(rencana)} draf akan dijadwalkan; pakai --apply untuk menerapkan)")
    json.dump(rencana, open(f"{WS}/drafts/repliz_rencana_aktif.json", "w"), indent=1, ensure_ascii=False)
    sys.exit(0)

print(f"\n=== menerapkan {len(rencana)} jadwal ===")
ok = gagal = 0
for i, r in enumerate(rencana, 1):
    try:
        # API Repliz: PATCH tidak didukung (404). Yang bekerja: PUT dengan objek jadwal UTUH
        # hasil GET, hanya scheduleAt yang diubah. Jangan sertakan _id/createdAt/updatedAt.
        asli = client.get_schedule(r["id"])
        badan = dict(asli)
        badan["scheduleAt"] = r["slot"]
        for k in ("_id", "id", "createdAt", "updatedAt", "__v"):
            badan.pop(k, None)
        client._request("PUT", f"/public/schedule/{r['id']}", badan)
        cek = client.get_schedule(r["id"])
        if isinstance(cek, dict) and str(cek.get("scheduleAt", ""))[:16] == r["slot"][:16]:
            ok += 1
            print(f"   {i}/{len(rencana)} ✅ {r['akun']} → {r['slot'][:16]}")
        else:
            gagal += 1
            print(f"   {i}/{len(rencana)} ⚠️ {r['akun']} tidak sesuai: {str((cek or {}).get('scheduleAt'))[:16]}")
    except Exception as e:
        gagal += 1
        print(f"   {i}/{len(rencana)} ❌ {r['akun']}: {str(e)[:80]}")
    time.sleep(0.4)
print(f"\nselesai: berhasil {ok} | gagal {gagal}")
