#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""gen_uky5_quotes.py — seri ke-5 kartu quote untuk Threads @ukyhandoko.

Latar belakang (17 Okt 2026): antrean `image_posting_queue.json` (88 item) HABIS TOTAL —
index wrap ke 0, dan 0 item pun layak tayang:
  • 29 item = arsip Juli `studiosoft_batch/*` ber-bg #1E40AF (navy LAMA yang DILARANG
    perintah Bos 16 Sep 2026) → tidak boleh diposting, harus render ulang.
  • 59 item sisanya sudah tayang (tercatat di `image_posting_log.json`).
Lane kartu 08:00 WIB Threads @ukyhandoko terisi s/d 9 Nov 2026 (seri uky4) → seri baru ini
menyambung mulai 10 Nov 2026. Preseden: 4 Okt 2026 Bos perintahkan tambah stok kartu
("Lakukan 3, 2, 1") → dibuat seri uky4 (18 kartu).

Spesifikasi WAJIB (Bos 16 Sep 2026, jangan diubah):
  square 1080x1080 · judul Poppins-Bold 85 · body Poppins-Regular 36 · rata kiri ·
  satu blok di tengah vertikal · tanpa garis separator · tanpa glyph bullet ·
  header "@ukyhandoko" + footer "@ukyhandoko • Founder StudioSoft".
Warna: BIRU #122B63 (RGB 18,43,99) · PUTIH · ORANGE (249,115,22) — BUKAN navy lama.

Pakai:
  python3 gen_uky5_quotes.py render    # render 3 warna per quote -> uky5_output/
  python3 gen_uky5_quotes.py queue     # tambahkan 14 item ke image_posting_queue.json
                                       # + arahkan state index ke item baru pertama
"""
import json, os, sys

WS = os.path.dirname(os.path.abspath(__file__))
OUT = os.path.join(WS, "uky5_output")
FOOTER = "@ukyhandoko \u2022 Founder StudioSoft"

# 14 quote BARU — tema belum pernah tayang di kartu/Threads @ukyhandoko
# (dicek terhadap korpus 1.909 jadwal Repliz + log kartu uky3/uky4).
LIST_POSTINGAN = [
 {"nama": "tanya_sebelum_kerjakan", "judul": "Tanya Dulu, Jangan Langsung Kerjakan",
  "body": "Yang bikin proyek mundur jarang soal kemampuan. Lebih sering karena asumsi yang tidak pernah ditanyakan di awal."},
 {"nama": "balas_lebih_cepat", "judul": "Menang Karena Menjawab Lebih Cepat",
  "body": "Saya sering dapat proyek bukan karena penawaran termurah, tapi karena jadi yang pertama menjawab dengan jelas."},
 {"nama": "perjanjian_jelas", "judul": "Perjanjian Jelas Itu Bentuk Saling Menghormati",
  "body": "Detail pekerjaan saya tulis di awal bukan karena tidak percaya. Justru supaya kerjaan dan hubungan sama-sama awet."},
 {"nama": "delegasi_standar", "judul": "Serahkan Caranya, Pegang Standarnya",
  "body": "Delegasi bukan lepas tangan. Yang saya berikan ke tim itu caranya, yang saya jaga tetap standar hasilnya."},
 {"nama": "salah_sekali_cukup", "judul": "Salah Itu Wajar, Mengulanginya Tidak",
  "body": "Saya tidak marah kalau tim salah. Yang saya minta cuma satu: setelah salah, ada yang berubah di cara kerjanya."},
 {"nama": "pertanyaan_klien_hadiah", "judul": "Klien yang Banyak Bertanya Itu Hadiah",
  "body": "Pertanyaan klien menunjukkan bagian mana dari cara kerja kita yang belum jelas. Yang bikin gugup justru klien yang diam lalu hilang."},
 {"nama": "portofolio_bicara_duluan", "judul": "Hasil Kerja Bicara Sebelum Kamu Bicara",
  "body": "Orang menilai kemampuan saya dari kerja terakhir yang mereka lihat. Karena itu rapi di semua tempat, bukan cuma di depan klien."},
 {"nama": "istirahat_bagian_kerja", "judul": "Istirahat Itu Bagian dari Kerja",
  "body": "Minggu yang tenang sering menghasilkan keputusan lebih bagus daripada minggu yang penuh. Saya baru sadar itu setelah lelah berkepanjangan."},
 {"nama": "rekomendasi_orang_lain", "judul": "Iklan Termahal Itu Rekomendasi Orang Lain",
  "body": "Pesan dari klien, \u201dtadi ada yang tanya soal kalian, saya rekomendasikan\u201d \u2014 iklan seperti itu tidak bisa saya beli."},
 {"nama": "belajar_dari_yang_dulu", "judul": "Belajar dari yang Lebih Dulu, Bukan Menyalin",
  "body": "Saya suka mengamati kerja orang lain. Yang saya ambil pola kerjanya, bukan isi kontennya."},
 {"nama": "cek_ulang_mata_klien", "judul": "Baca Ulang Kerja Kamu Pakai Mata Klien",
  "body": "Sebelum hasil dikirim, saya baca ulang sambil bertanya: pertanyaannya sudah dijawab, atau saya cuma menambah pertanyaan baru?"},
 {"nama": "kerja_sendiri_batas", "judul": "Tidak Semua Pekerjaan Harus Kamu Kerjakan",
  "body": "Tidak semua pekerjaan yang bisa saya kerjakan harus saya kerjakan. Fokus saya tinggal di bagian yang cuma bisa saya kerjakan."},
 {"nama": "layanan_setelah_bayar", "judul": "Layanan Dinilai Setelah Klien Membayar",
  "body": "Semua orang ramah sebelum klien membayar. Yang menentukan reputasi justru apa yang kamu lakukan setelah uangnya masuk."},
 {"nama": "alat_baru_bukan_strategi", "judul": "Ganti Alat Tidak Mengganti Strategi",
  "body": "Pindah platform atau coba alat baru tidak menyelesaikan apa-apa kalau tawaran kita masih belum jelas."},
]

WARNA_ROTASI = ["BIRU", "PUTIH", "ORANGE"]


def render_all():
    import importlib.util
    spec = importlib.util.spec_from_file_location("guc", os.path.join(WS, "gen_uky_center.py"))
    guc = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(guc)
    os.makedirs(OUT, exist_ok=True)
    n = 0
    for k in LIST_POSTINGAN:
        for suf, (bg, fg) in guc.BG_MAP.items():
            fn = f"{k['nama']}_{suf.lower()}.png"
            guc.render(bg, fg, k["judul"], k["body"], FOOTER, "1/1",
                       filename=fn, mode="left", out_dir=OUT,
                       canvas=(1080, 1080), title_size=85, body_size=36,
                       header="@ukyhandoko")
            n += 1
    print(f"render {n} file -> {OUT}")
    return n


def queue_add():
    qp = os.path.join(WS, "image_posting_queue.json")
    q = json.load(open(qp))
    ada = {x.get("id") for x in q}
    mulai = len(q)
    tambah = 0
    for i, k in enumerate(LIST_POSTINGAN):
        warna = WARNA_ROTASI[i % 3]
        fn = f"{k['nama']}_{warna.lower()}.png"
        item_id = "uky_quote5_" + k["nama"]
        if item_id in ada:
            continue
        path = f"uky5_output/{fn}"
        if not os.path.exists(os.path.join(WS, path)):
            print("TERLEWAT, file belum ada:", path)
            continue
        q.append({"id": item_id, "brand": "ukyhandoko", "source": "uky5_output",
                  "topic": k["nama"], "filename": fn, "paths": [path],
                  "targets": ["threads_ukyhandoko"]})
        tambah += 1
    json.dump(q, open(qp, "w"), indent=1, ensure_ascii=False)
    sp = os.path.join(WS, "image_posting_state.json")
    st = json.load(open(sp))
    st["total"] = len(q)
    st["index"] = mulai            # item 0..88-1 semua sudah tayang/kedaluwarsa -> lompat
    st["lompat_catatan"] = ("17 Okt 2026: 88 item lama (index 0-87) habis total; 29 di antaranya "
                            "arsip Juli ber-bg #1E40AF (dilarang standar 16 Sep) dan 59 lainnya "
                            "sudah tayang. Index dipindah ke item baru pertama (seri uky5).")
    json.dump(st, open(sp, "w"), indent=2)
    print(f"queue: +{tambah} item -> total {len(q)} | state {st}")


if __name__ == "__main__":
    aksi = sys.argv[1] if len(sys.argv) > 1 else "render"
    if aksi == "render":
        render_all()
    elif aksi == "queue":
        queue_add()
    else:
        print(__doc__)
