#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""pasang_fotografi_uky.py — pasang lane FOTOGRAFI di Threads @ukyhandoko.

Perintah Bos 4 Okt 2026: "di threads ukyhandoko aku juga sebagai fotografer dan
bahas juga tentang fotografi".

Pola: 1 post/hari, jam 23:00 WIB, teks (tanpa link), label `Fotografi & Visual`,
`replies=[]`, idempoten per slot (akun + scheduleAt). Default DRY RUN.

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

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
WIB = datetime.timezone(datetime.timedelta(hours=7))
TOPIC = "Fotografi & Visual"
JAM_WIB = 23
MULAI = datetime.date(2026, 10, 5)
STATE = os.path.join(WS, "fotografi_uky_state.json")

RUN = "--run" in sys.argv
cli = ReplizClient()


def semua_jadwal_uky():
    out, 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:
                out.append(s)
        if page >= (d.get("totalPages") or 1):
            break
        page += 1
    return out


def slot_jam(s):
    iso = s.get("scheduleAt")
    if not iso:
        return None
    return datetime.datetime.fromisoformat(iso.replace("Z", "+00:00")).astimezone(WIB)


def utama():
    jadwal = semua_jadwal_uky()
    terpakai = {}
    for s in jadwal:
        if s.get("status") in ("pending", "processing", "draft"):
            dt = slot_jam(s)
            if dt:
                terpakai[(dt.date(), dt.hour)] = s
    print(f"jadwal @ukyhandoko Threads: {len(jadwal)} (pending aktif: {len(terpakai)})")

    hasil, ok, skip, gagal = [], 0, 0, 0
    for i, b in enumerate(BANK):
        tgl = MULAI + datetime.timedelta(days=i)
        kunci = (tgl, JAM_WIB)
        if kunci in terpakai:
            print(f"⏭️  {b['id']} {tgl} 23:00 — slot sudah terisi, skip")
            skip += 1
            continue
        m = validasi(b["teks"])
        if m:
            print(f"❌ {b['id']} validasi gagal: {m}")
            gagal += 1
            continue
        judul = f"uky {TOPIC} {tgl.isoformat()}"
        schedule_at = f"{tgl.isoformat()}T16:00:00.000Z"   # 23:00 WIB = 16:00Z
        print(f"— {b['id']} {b['tema']} | {tgl} 23:00 WIB | {len(b['teks'])} char | {judul}")
        if not RUN:
            ok += 1
            continue
        res = cli.create_schedule(ACC.UKY_THREADS, b["teks"], schedule_at,
                                  title=judul, topic=TOPIC, type_="text", replies=[])
        sid = res.get("scheduleId") or res.get("_id") or res.get("id")
        if not sid:
            print(f"   ❌ create gagal: {res}")
            gagal += 1
            continue
        chk = cli.get_schedule(sid)
        sched = chk.get("schedule") or chk
        panjang = len(sched.get("description") or "")
        status = sched.get("status")
        st_tgl = slot_jam(sched)
        baik = (status == "pending" and st_tgl and st_tgl.date() == tgl
                and st_tgl.hour == JAM_WIB and panjang == len(b["teks"])
                and not (sched.get("replies") or []))
        print(f"   {'✅' if baik else '⚠️'} id={sid} status={status} jam={st_tgl} "
              f"panjang={panjang} replies={len(sched.get('replies') or [])}")
        hasil.append({"id": sid, "b": b["id"], "tema": b["tema"], "tgl": tgl.isoformat(),
                      "status": status, "jam": st_tgl.isoformat() if st_tgl else None,
                      "verified": bool(baik)})
        ok += 1 if baik else 0
        gagal += 0 if baik else 1

    print(f"\n=== {'EKSEKUSI' if RUN else 'DRY RUN'} — siap/ok: {ok} · skip: {skip} · gagal: {gagal} ===")
    if RUN and hasil:
        json.dump({"dipasang_at": datetime.datetime.now(WIB).isoformat(), "hasil": hasil},
                  open(STATE, "w"), indent=1)
        print(f"state -> {STATE}")


if __name__ == "__main__":
    utama()
