#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Pasang bank @ukyhandoko batch 2 (14-31 Okt 2026, 2 post/hari: 11:00 & 20:00 WIB).

Pakai: python3 pasang_bank_uky_1410.py plan | run
Reuse validator dari pasang_bank_growth_threads.py (CTA ekor ketat, hashtag lowercase, no mention/CJK).
"""
import importlib.util, json, sys, datetime, time
from repliz_client import get_client

UKY = "6a334e89c5ff4ce3a3225a48"
SLOT = [11, 20]          # WIB
MULAI = datetime.date(2026, 10, 14)
HARI = 18                # 14-31 Okt
# Label/kategori jadwal — JANGAN pakai kata "growth" untuk uky
# (perintah Bos 4 Okt 2026: "Itu threads jangan kategori growth uky").
# Aturan terbaru: label + judul = POKOK BAHASAN isi post (Bos: "semisal bahas AI ya seputaran AI"),
# bukan tipe Q/O/T. Peta label resmi: `label_ulang_threads_isi.py`.
PETA = {"Q": "Diskusi & Tanya", "O": "Opini Bisnis", "T": "Tips & Pengalaman"}

spec = importlib.util.spec_from_file_location("bank2", "bank_threads_growth_uky_1410.py")
bank2 = importlib.util.module_from_spec(spec)
spec.loader.exec_module(bank2)

import pasang_bank_growth_threads as P   # pakai validasi() yang sama


def rencana():
    ent = bank2.UKY2
    butuh = HARI * len(SLOT)
    assert len(ent) >= butuh, f"bank kurang: {len(ent)} < {butuh}"
    tugas, i = [], 0
    for d in range(HARI):
        tgl = MULAI + datetime.timedelta(days=d)
        for css, jam in enumerate(SLOT):
            e = ent[i]
            i += 1
            full, masalah = P.validasi("uky", e["text"], i)
            tugas.append({"akun": "uky", "tgl": tgl.isoformat(), "jam": jam,
                          "tipe": e["tipe"], "text": full, "masalah": masalah})
    return tugas


def main():
    mode = sys.argv[1] if len(sys.argv) > 1 else "plan"
    tugas = rencana()
    bad = [t for t in tugas if t["masalah"]]
    print(f"total {len(tugas)} | bermasalah {len(bad)}")
    for t in tugas:
        print(f"  {t['tgl']} {t['jam']:02d}:00 [{t['tipe']}] len={len(t['text']):3} "
              f"{'❌ ' + ','.join(t['masalah']) if t['masalah'] else '✅'}  {t['text'][:52]!r}")
    if mode != "run":
        return
    if bad:
        print("⛔ masih ada entri invalid"); return

    c = get_client()
    docs, page = [], 1
    while True:
        r = c.get_schedules(page=page, limit=100)
        d = r.get("docs") or []
        docs.extend(d)
        if not d or len(docs) >= (r.get("totalDocs") or 0) or page > 40:
            break
        page += 1
    terisi = set()
    for d in docs:
        aid = (d.get("account") or {}).get("_id") or d.get("accountId")
        if aid != UKY or d.get("status") in ("error", "draft", "canceled"):
            continue
        terisi.add((d.get("scheduleAt") or "")[:16])
    print("jadwal existing uky:", len(terisi))

    hasil = []
    for t in tugas:
        iso = f"{t['tgl']}T{t['jam']-7:02d}:00"
        if (UKY, iso) in terisi:
            hasil.append((t, "SKIP-slot-terisi", None)); print("skip", iso); continue
        label = PETA.get(t["tipe"], "Diskusi & Tanya")
        res = c.create_schedule(UKY, t["text"], f"{iso}:00.000Z",
                                title=f"uky {t['tipe']} {t['tgl']}",
                                topic=label, type_="text", medias=[], replies=[])
        sid = res.get("scheduleId") or res.get("_id") or res.get("id")
        terisi.add((UKY, iso))
        hasil.append((t, "CREATED" if sid else "GAGAL", sid))
        print(f"  {iso} -> {sid}")
        time.sleep(0.4)
    ok = sum(1 for _, s, _ in hasil if s == "CREATED")
    print(f"\nSELESAI: created {ok} | skip {len(hasil)-ok}")
    json.dump([{**t, "status": s, "id": i} for t, s, i in hasil],
              open("growth_threads_uky2_hasil.json", "w"), ensure_ascii=False, indent=1)


if __name__ == "__main__":
    main()
