#!/usr/bin/env python3
"""daily-image-posting-all: item index 37 uky_thread_07_orange_agency_lain → Threads @ukyhandoko.
Slot: 08:00 WIB bebas pertama SETELAH 19 Sep 2026 (06_white_gagal). Image 05=18 Sep, 06=19 Sep,
seri diurutkan: 07 tayang SETELAH 06 → scan mulai 2026-09-20.
Media: https://studiosoft.id/wp-content/uploads/2026/07/07_orange_agency_lain.png (wp_image_map id 6375).
Tema gambar (generate_uky_threads_images.py): "Agak Lain — Kenapa Saya Pilih Jalan Berbeda":
agency mainstream main aman (template sama), saya pilih data-driven bukan feeling-driven,
klien bertahan karena lihat ROI, bukan cuma gambar bagus.
"""
import json, sys, time, urllib.request
from datetime import datetime, timezone, timedelta

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

UKY_T = "6a334e89c5ff4ce3a3225a48"
MEDIA_URL = "https://studiosoft.id/wp-content/uploads/2026/07/07_orange_agency_lain.png"
TITLE = "Agak Lain"
TOPIC = "Digital Agency"

CAPTION = (
    "Dari dulu saya sering ditanya: \u201cKenapa nggak kayak agency lain aja, "
    "biar cepat beres?\u201d \U0001F60C\n\n"
    "Jawaban saya: justru di situ bedanya.\n\n"
    "Kebanyakan agency main aman \u2014 template sama, strategi itu-itu lagi. "
    "Saya milih agak lain: data-driven, bukan feeling-driven. Bukan cuma bikin "
    "cantik, tapi bikin efektif.\n\n"
    "Hasilnya? Klien bertahan lebih lama. Mereka lihat ROI, bukan cuma gambar bagus.\n\n"
    "Menurut kamu, lebih baik ikut arus atau berani beda? Cerita di komentar ya! \U0001F447"
)

def fetch_all(client):
    r = client.get_schedules(page=1, limit=100)
    pages = (r["totalDocs"] + 99) // 100
    docs = list(r["docs"])
    for p in range(2, pages + 1):
        docs.extend(client.get_schedules(page=p, limit=100)["docs"])
    return docs

def acc_id(d):
    return d.get("accountId") or (d.get("account") or {}).get("id")

def main():
    print("caption chars:", len(CAPTION))
    assert len(CAPTION) <= 500, "caption > 500"
    low = CAPTION.lower()
    assert "komentar" in low or "menurut" in low, "pancingan diskusi hilang"
    assert "@" not in CAPTION, "ada mention internal"

    c = get_client()
    docs = fetch_all(c)

    # ── Anti-dobel: cek jadwal utk media ini (SEMUA status) di akun uky threads ──
    dup = [d for d in docs
           if acc_id(d) == UKY_T
           and any("07_orange_agency_lain" in (m.get("url") or "") for m in (d.get("medias") or []))]
    if dup:
        print("❌ 07_orange_agency_lain SUDAH pernah dijadwalkan — SKIP:")
        for d in dup:
            print("  ", d.get("id"), d.get("status"), d.get("scheduleAt"))
        sys.exit(1)
    print("anti-dobel OK: 0 jadwal 07_orange_agency_lain di akun uky threads")

    # ── Cari slot 08:00 WIB (01:00 UTC) bebas pertama mulai 20 Sep 2026 ──
    pend = [d for d in docs if acc_id(d) == UKY_T and d.get("status") == "pending"]
    occupied = sorted({(d.get("scheduleAt") or "")[:16] for d in pend})
    print("pending uky threads (scheduleAt[:16]) count:", len(occupied))

    sched_utc = None
    day = datetime(2026, 9, 20, tzinfo=timezone.utc)
    for _ in range(20):  # scan maks 20 hari
        cand = day.strftime("%Y-%m-%dT01:00:00")
        if cand not in occupied:
            sched_utc = cand + ".000Z"
            break
        day = day + timedelta(days=1)
    if not sched_utc:
        print("❌ tidak ada slot 08:00 WIB bebas s/d +20 hari — STOP, lapor Bos")
        sys.exit(1)
    print("slot terpilih:", sched_utc, "=", "08:00 WIB", day.strftime("%Y-%m-%d"))

    # ── Create ──
    payload_media = [{"url": MEDIA_URL, "type": "image", "alt": "07_orange_agency_lain.png"}]
    resp = c.create_schedule(UKY_T, CAPTION, sched_utc, title=TITLE, topic=TOPIC,
                             type_="image", medias=payload_media, replies=[])
    sid = resp.get("_id") or resp.get("id")
    print("create resp id:", sid, "| keys:", list(resp.keys()))
    time.sleep(2)

    # ── Verifikasi: re-list, cari media 07_orange_agency_lain ──
    docs = fetch_all(c)
    found = [d for d in docs
             if acc_id(d) == UKY_T
             and any("07_orange_agency_lain" in (m.get("url") or "") for m in (d.get("medias") or []))]
    print("verifikasi: jadwal berisi 07_orange_agency_lain:", len(found))
    for d in found:
        print(json.dumps({
            "id": d.get("id"), "status": d.get("status"), "scheduleAt": d.get("scheduleAt"),
            "type": d.get("type"), "title": d.get("title"),
            "media": (d.get("medias") or [{}])[0].get("url"),
            "desc_len": len(d.get("description") or ""),
            "replies": len(d.get("replies") or []),
        }, ensure_ascii=False))
    if not found:
        print("❌ TIDAK ADA jadwal terverifikasi — jangan update state!")
        sys.exit(1)
    main_id = found[0].get("id")
    for d in found:
        if (d.get("scheduleAt") or "").startswith(sched_utc[:16]):
            main_id = d.get("id")
            break

    # ── Update state + log ──
    st = json.load(open("image_posting_state.json"))
    nxt = (st["index"] + 1) % st["total"]
    st["index"] = nxt
    json.dump(st, open("image_posting_state.json", "w"), indent=2)

    log = []
    try:
        log = json.load(open("image_posting_log.json"))
    except Exception:
        log = []
    entry = {
        "timestamp": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.000Z"),
        "item_id": "uky_thread_07_orange_agency_lain",
        "brand": "ukyhandoko",
        "source": "uky_threads_images",
        "filename": "07_orange_agency_lain.png",
        "topic": "agency_lain",
        "slot_note": f"08:00 WIB 7-17 Sep penuh pipeline lain; 18 Sep=image 05, 19 Sep=image 06 → slot bebas 08:00 WIB pertama utk seri = {day.strftime('%d %b')}",
        "schedule_times": {"threads_uky": f"{sched_utc} (08:00 WIB {day.strftime('%Y-%m-%d')}) - image 1"},
        "repliz_ids": {"threads_uky": main_id},
        "caption_chars": len(CAPTION),
        "next_index": nxt,
    }
    log.append(entry)
    json.dump(log, open("image_posting_log.json", "w"), indent=1, ensure_ascii=False)
    print("✅ state index ->", nxt, "| log entries:", len(log))

if __name__ == "__main__":
    main()
