#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""gen_uky4_quotes.py — 18 kartu quote BARU untuk Threads @ukyhandoko.

Latar belakang: antrean `image_posting_queue.json` habis di index 67 (kartu uky terakhir,
24 Okt 08:00 WIB). Skrip ini menambah seri ke-4 supaya slot kartu 08:00 uky tetap jalan
setelah Oktober.

Aturan tampilan 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 · header/footer @ukyhandoko.

Pakai:
  python3 gen_uky4_quotes.py render     # render 3 warna per quote -> uky4_output/
  python3 gen_uky4_quotes.py queue      # tambahkan varian BIRU ke image_posting_queue.json
"""
import json, os, sys

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

LIST_POSTINGAN = [
 {"nama": "ai_alat_bukan_otak", "judul": "AI Itu Alat, Bukan Pengganti Otak",
  "body": "AI mempercepat tangan, tapi tidak menggantikan keputusan. Yang membedakan hasil bukan alatnya, tapi siapa yang mengarahkannya."},
 {"nama": "klien_mitra_bukan_raja", "judul": "Klien Itu Mitra, Bukan Raja",
  "body": "Klien yang baik bukan yang selalu benar, tapi yang mau diajak berpikir. Saya lebih memilih sedikit klien seperti itu."},
 {"nama": "murah_itu_utang", "judul": "Harga Murah Itu Utang",
  "body": "Harga terlalu murah bikin capek, kerjaan numpuk, dan kemampuan tidak naik. Naikkan nilai dulu, harga mengikuti."},
 {"nama": "fokus_itu_menutup_pintu", "judul": "Fokus Itu Menutup Pintu",
  "body": "Fokus bukan mengerjakan satu hal selamanya. Fokus itu berani mengatakan tidak pada peluang yang mengalihkan."},
 {"nama": "langkah_kecil_rutin", "judul": "Kecil Tapi Rutin Mengalahkan Besar Tapi Sekali",
  "body": "Satu langkah kecil setiap hari lebih jauh daripada satu lompatan besar yang cuma sekali. Yang menang biasanya yang tidak berhenti."},
 {"nama": "jangan_tunggu_siap", "judul": "Jangan Tunggu Siap Baru Mulai",
  "body": "Kesempatan pertama saya datang saat saya belum siap. Kalau saya menunggu siap, sampai sekarang cuma jadi rencana."},
 {"nama": "reputasi_hal_kecil", "judul": "Reputasi Dibangun dari Hal Kecil",
  "body": "Balas pesan di hari yang sama. Kirim berkas sebelum ditanya. Semua terlihat sepele, tapi itu yang membuat orang kembali."},
 {"nama": "konten_menjawab_bukan_ramai", "judul": "Konten yang Menjawab, Bukan yang Ramai",
  "body": "Saya tidak lagi mengejar ramai. Saya mengejar orang yang sedang mencari jawaban, lalu menemukannya di tempat saya."},
 {"nama": "otomatiskan_yang_membosankan", "judul": "Otomatiskan yang Membosankan",
  "body": "Bukan alat mahal yang menghemat waktu saya, tapi menyerahkan pekerjaan yang bentuknya selalu sama ke mesin."},
 {"nama": "tim_tahu_batasnya", "judul": "Tim Hebat Tahu Batasnya",
  "body": "Orang tidak butuh dimotivasi terus. Mereka butuh tahu apa tugasnya, sampai kapan, dan apa artinya selesai."},
 {"nama": "tidak_itu_strategi", "judul": "Kata Tidak Itu Bagian dari Strategi",
  "body": "Setiap pekerjaan yang saya ambil karena tidak enak menolak, hampir selalu jadi pekerjaan yang saya sesali."},
 {"nama": "ukur_yang_penting", "judul": "Ukur yang Penting, Bukan yang Mudah",
  "body": "Jumlah pengikut itu mudah dihitung. Yang lebih penting: berapa orang bertanya, berapa yang kembali, berapa yang bercerita ke orang lain."},
 {"nama": "website_rumah_bukan_kost", "judul": "Website Itu Rumah, Bukan Kost",
  "body": "Media sosial tempat menyapa. Website tempat orang mengenal kamu seutuhnya, dan tidak bisa diambil orang lain."},
 {"nama": "berhenti_sebelum_terlambat", "judul": "Berhenti Sebelum Terlambat",
  "body": "Proyek terbaik yang pernah saya selamatkan adalah proyek yang saya putuskan berhenti lebih awal. Berhenti itu keputusan, bukan kegagalan."},
 {"nama": "kerja_rapi_klien_kembali", "judul": "Kerja Rapi Bikin Klien Kembali",
  "body": "Klien tidak menuntut hasil sempurna. Mereka cuma tidak suka dikejutkan. Rapi dan jujur jauh lebih mahal daripada janji bagus."},
 {"nama": "ai_ikut_bekerja_kamu_memutuskan", "judul": "AI Bekerja, Kamu yang Memutuskan",
  "body": "Saya pakai AI untuk mengumpulkan bahan dan merapikan tulisan. Bagian opini dan keputusan tetap milik manusia."},
 {"nama": "konsisten_mengalahkan_viral", "judul": "Konsisten Mengalahkan Viral",
  "body": "Viral itu bonus. Yang menghidupi bisnis adalah orang yang ingat kamu saat mereka butuh, bukan yang cuma lewat sekali."},
 {"nama": "data_tanpa_konteks", "judul": "Data Tanpa Konteks Cuma Angka",
  "body": "Angka baru berguna kalau kita tahu pertanyaannya. Sebelum bertanya, laporan setebal apa pun cuma jadi bacaan."},
]

WARNA = {"BIRU": None, "PUTIH": None, "ORANGE": None}


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}
    tambah = 0
    for i, k in enumerate(LIST_POSTINGAN):
        warna = list(WARNA.keys())[i % 3]
        suf = warna.lower()
        fn = f"{k['nama']}_{suf}.png"
        item_id = "uky_quote4_" + k["nama"]
        if item_id in ada:
            continue
        path = f"uky4_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": "uky4_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)
    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__)
