#!/usr/bin/env python3
"""
🎨 gen_uky3.py — Generator 3 Background untuk Threads @ukyhandoko
Tinggal isi konten di LIST_POSTINGAN, jalanin, langsung dapet 3 file:
  🔵 Biru  → {nama}_biru.png
  ⚪ Putih → {nama}_putih.png
  🟠 Orange → {nama}_orange.png

Cara pakai:
  1. Edit LIST_POSTINGAN di bawah
  2. python3 gen_uky3.py
  3. File PNG ada di folder uky3_output/
"""

from PIL import Image, ImageDraw, ImageFont
import os

OUT = os.path.expanduser("~/.openclaw/workspace-atun/uky3_output")
os.makedirs(OUT, exist_ok=True)

W, H = 1080, 1920
M = 65
MAX_W = W - 2 * M

# COLOR
BIRU = (30, 64, 175)
PUTIH = (255, 255, 255)
ORANGE = (249, 115, 22)
BIRU_TEKS = (30, 64, 175)

FONT = os.path.expanduser("~/.fonts")

def font(nama, ukuran):
    return ImageFont.truetype(os.path.join(FONT, nama), ukuran)

F_BOLD = {
    110: font("Poppins-Bold.ttf", 110),
    100: font("Poppins-Bold.ttf", 100),
    90:  font("Poppins-Bold.ttf", 90),
    85:  font("Poppins-Bold.ttf", 85),
    80:  font("Poppins-Bold.ttf", 80),
    75:  font("Poppins-Bold.ttf", 75),
    70:  font("Poppins-Bold.ttf", 70),
    65:  font("Poppins-Bold.ttf", 65),
}

F_REG = {
    40: font("Poppins-Regular.ttf", 40),
    36: font("Poppins-Regular.ttf", 36),
    32: font("Poppins-Regular.ttf", 32),
    30: font("Poppins-Regular.ttf", 30),
    28: font("Poppins-Regular.ttf", 28),
    24: font("Poppins-Regular.ttf", 24),
    20: font("Poppins-Regular.ttf", 20),
}

def wrap(t, f, mw=MAX_W):
    """Wrap text to fit max_width."""
    words = t.split()
    lines, cur = [], ""
    for w in words:
        test = cur + " " + w if cur else w
        tw = f.getbbox(test)[2]
        if tw <= mw:
            cur = test
        else:
            if cur: lines.append(cur)
            cur = w
    if cur: lines.append(cur)
    return lines

def draw_lines(d, lines, f, y, color, sp=8):
    for l in lines:
        for wl in wrap(l, f, MAX_W):
            d.text((M, y), wl, fill=color, font=f)
            y += f.size + sp
    return y

def slide(bg, teks_color, judul, body="", footer="", jd_f=F_BOLD[85], bd_f=F_REG[36], fn="slide.png", pg=""):
    img = Image.new("RGB", (W, H), bg)
    d = ImageDraw.Draw(img)
    
    # Header
    d.text((M, M), "@ukyhandoko", font=F_REG[24], fill=teks_color)
    if pg:
        d.text((W - M, M), pg, font=F_REG[20], fill=teks_color, anchor="rt")
    
    # Title
    y = draw_lines(d, wrap(judul, jd_f), jd_f, 280, teks_color, 4)
    
    # Divider
    y += 20
    d.line([(M, y), (M + 160, y)], fill=teks_color, width=3)
    y += 30
    
    # Body
    if body:
        bl = wrap(body, bd_f)
        avail = H - 120 - y
        max_l = max(1, avail // (bd_f.size + 8))
        if len(bl) > max_l: bl = bl[:max_l]
        y = draw_lines(d, bl, bd_f, y, teks_color, 8)
    
    # Footer
    if footer:
        d.text((M, H - M), footer, font=F_REG[20], fill=teks_color)
    
    p = os.path.join(OUT, fn)
    img.save(p, "PNG")
    print(f"  ✅ {fn}")

def gen3(nama, judul, body="", footer="", jd_f=F_BOLD[85], bd_f=F_REG[36]):
    """Generate 1 konten → 3 background: Biru, Putih, Orange"""
    print(f"\n📝 {nama}")
    slide(BIRU, PUTIH, judul, body, footer, jd_f, bd_f, f"{nama}_biru.png", pg="1/1")
    slide(PUTIH, BIRU_TEKS, judul, body, footer, jd_f, bd_f, f"{nama}_putih.png", pg="1/1")
    slide(ORANGE, PUTIH, judul, body, footer, jd_f, bd_f, f"{nama}_orange.png", pg="1/1")

def gen_batch(konten_list):
    """Generate batch dari list konten. Tiap konten dapet 3 background."""
    total = 0
    for k in konten_list:
        gen3(
            nama=k["nama"],
            judul=k["judul"],
            body=k.get("body", ""),
            footer=k.get("footer", ""),
            jd_f=F_BOLD.get(k.get("judul_size", 85), F_BOLD[85]),
            bd_f=F_REG.get(k.get("body_size", 36), F_REG[36]),
        )
        total += 1
    print(f"\n{'='*50}")
    print(f"✅ {total} konten × 3 background = {total*3} file PNG")
    print(f"📁 Folder: {OUT}/")

# ============================================================
# ✏️  EDIT LIST DI BAWAH INI — tinggal tambah/kurang konten
# ============================================================

LIST_POSTINGAN = [
    # ---- 🔵 BIRU cocok: Digital, SEO, AI, Teknologi ----
    # ---- ⚪ PUTIH cocok: Leadership, Mindset, Quotes ----
    # ---- 🟠 ORANGE cocok: Agency Life, Klien, Startup ----

    {
        "nama": "digital_vs_tradisional",
        "judul": "Digital vs Tradisional:\nBukan Pilih Salah Satu",
        "body": (
            "Banyak yang mikir digital marketing itu gantiin yang tradisional.\n\n"
            "Padahal yang paling jitu adalah kombinasi keduanya.\n\n"
            "Digital buat jangkauan luas & measurable. Tradisional buat sentuhan personal & kepercayaan.\n\n"
            "Pilih medium based on audiend Anda, bukan based on trend."
        ),
        "footer": "@ukyhandoko • Founder StudioSoft",
    },
    {
        "nama": "konsistensi_brand",
        "judul": "Brand yang Kuat Itu\nDibangun dari Konsistensi",
        "body": (
            "Bukan dari satu iklan viral. Bukan dari satu postingan bagus.\n\n"
            "Brand kuat lahir dari konsistensi: pesan yang sama, visual yang sama, value yang sama — "
            "diulang terus sampai orang hafal di luar kepala.\n\n"
            "Repetisi membangun kepercayaan."
        ),
        "footer": "dmark.id • Strategic Branding Agency",
    },
    {
        "nama": "data_vs_intuisi",
        "judul": "Data vs Intuisi:\nDua-duanya Penting",
        "body": (
            "Di StudioSoft, kami pakai data buat ambil keputusan strategis.\n\n"
            "Tapi data tanpa intuisi itu kering. Intuisi tanpa data itu tebak-tebakan.\n\n"
            "Kuncinya: data kasih arah, intuisi kasih sentuhan manusiawi.\n\n"
            "Jangan fanatik sama salah satunya."
        ),
        "footer": "studiosoft.id • Digital Growth Partner",
    },
    {
        "nama": "content_is_still_king",
        "judul": "Konten Berkualitas Tetap\nRaja di Era AI",
        "body": (
            "AI bisa nulis 1000 artikel sehari. Tapi artikel yang punya perspektif unik, "
            "pengalaman nyata, dan suara manusia — itu yang gak bisa ditiru.\n\n"
            "Gue lihat makin banyak konten 'generik' bertebaran. Justru di situ peluangnya: "
            "jadi satu-satunya yang bicara dengan autentik."
        ),
        "footer": "@ukyhandoko • Founder StudioSoft",
    },
    {
        "nama": "jaringan_aset",
        "judul": "Jaringan Adalah Aset\nPaling Underrated",
        "body": (
            "Dulu gue pikir networking itu cuma saling kenal. Sekarang gue tahu: "
            "networking itu saling ngasih value.\n\n"
            "Bisnis gue berkembang bukan karena iklan — tapi karena referral dari orang "
            "yang percaya sama gue.\n\n"
            "Bangun hubungan sebelum butuh sesuatu."
        ),
        "footer": "@ukyhandoko • Founder StudioSoft",
    },
    {
        "nama": "fokus_niche",
        "judul": "Kenapa Fokus ke Satu\nNiche Itu Penting",
        "body": (
            "Dulu gue mau nerima semua klien. Agensi generalis, semuanya dikerjain.\n\n"
            "Hasilnya? Biasa aja. Gak ada yang spesial.\n\n"
            "Sejak fokus ke healthcare & data-driven branding, klien justru lebih percaya. "
            "Karena kami dianggap ahlinya, bukan 'tukang serba bisa'.\n\n"
            "The riches are in the niches."
        ),
        "footer": "dmark.id • Strategic Branding Agency",
    },
    {
        "nama": "harga_vs_value",
        "judul": "Jangan Jual Murah\nKalau Value Anda Besar",
        "body": (
            "Banyak agency banting harga cuma buat dapet klien.\n\n"
            "Gue milih sebaliknya: kasih value dulu, buktiin hasil, baru bicara harga.\n\n"
            "Hasilnya? Klien gak pernah nawar. Mereka tahu apa yang mereka dapet "
            "sebanding — bahkan lebih — dari yang mereka bayar.\n\n"
            "Jangan kompetisi di harga. Kompetisi di hasil."
        ),
        "footer": "@ukyhandoko • Founder StudioSoft",
    },
    {
        "nama": "belajar_gagal",
        "judul": "Gagal Bukan Akhir,\nTapi Awal yang Baru",
        "body": (
            "Setiap kegagalan di bisnis gue adalah pelajaran paling berharga.\n\n"
            "Bukan dari buku. Bukan dari seminar. Tapi dari pengalaman jatuh dan bangun sendiri.\n\n"
            "Kuncinya: jangan ulangi kesalahan yang sama. Cari kesalahan baru yang lebih canggih."
        ),
        "footer": "@ukyhandoko • Founder StudioSoft",
    },
    {
        "nama": "investasi_branding",
        "judul": "Branding Bukan Biaya,\nIni Investasi",
        "body": (
            "Banyak UMKM mikir: 'Buat logo doang kok mahal? Ngapain?'\n\n"
            "Padahal brand yang kuat bisa:\n"
            "• Naikin harga jual 20-30%\n"
            "• Bikin pelanggan balik terus\n"
            "• Bedain Anda dari kompetitor\n\n"
            "Branding murah = positioning lemah. Positioning lemah = susah bersaing."
        ),
        "footer": "dmark.id • Strategic Branding Agency",
    },
    {
        "nama": "waktu_vs_uang",
        "judul": "Waktu Adalah Mata Uang\nPaling Berharga",
        "body": (
            "Orang bilang time is money. Tapi sebenarnya time is more than money.\n\n"
            "Uang bisa dicari lagi. Waktu yang udah lewat gak akan balik.\n\n"
            "Makanya gue selalu pilih: delegasin apa yang bisa didelegasi, "
            "otomasi apa yang bisa diotomasi, fokus di hal yang cuma gue bisa lakuin."
        ),
        "footer": "@ukyhandoko • Founder StudioSoft",
    },
    {
        "nama": "growth_mindset",
        "judul": "Growth Mindset:\nKunci Bertahan di Era Digital",
        "body": (
            "Yang membedakan antara bisnis yang bertahan vs yang mati:\n\n"
            "Bukan modal. Bukan relasi. Tapi kesediaan buat terus belajar.\n\n"
            "Yang gamau upgrade skill, gamau adaptasi teknologi, gamau denger kritik — "
            "pasti ketinggalan.\n\n"
            "Stay hungry, stay foolish."
        ),
        "footer": "@ukyhandoko • Founder StudioSoft",
    },
    {
        "nama": "team_dulu_baru_klien",
        "judul": "Tim yang Bahagia\nBikin Klien Bahagia",
        "body": (
            "Dulu gue fokus 100% ke klien. Tim cuma 'alat' buat ngerjain.\n\n"
            "Sekarang gue sadar: kalo tim gak happy, hasil kerja jelek. "
            "Kalo hasil kerja jelek, klien kabur.\n\n"
            "Investasi ke tim = investasi ke kualitas. Simple."
        ),
        "footer": "@ukyhandoko • Founder StudioSoft",
    },
    {
        "nama": "slow_business",
        "judul": "Slow Business Is\nGood Business",
        "body": (
            "Dulu gue pikir cepet-cepetan dapet klien, cepet-cepetan ngerjain, "
            "cepet-cepetan closing.\n\n"
            "Hasilnya? Stres, burnout, kualitas jeblok.\n\n"
            "Sekarang gue pelan-pelan. Ambil klien yang cocok. Proses dengan teliti. "
            "Hasil? Lebih baik, klien lebih puas, tidur lebih nyenyak."
        ),
        "footer": "@ukyhandoko • Founder StudioSoft",
    },
    {
        "nama": "beda_itu_bagus",
        "judul": "Jangan Takut Beda,\nTakut Sama Semua Orang",
        "body": (
            "Kalau strategi marketing Anda sama persis dengan kompetitor — "
            "Anda gak punya alasan buat dipilih.\n\n"
            "Keberanian buat beda itu yang bikin brand diingat.\n\n"
            "Gak perlu beda di semua hal. Cukup beda di satu hal yang penting buat audiens Anda."
        ),
        "footer": "dmark.id • Strategic Branding Agency",
    },
    {
        "nama": "feedback_adalah_emas",
        "judul": "Feedback Adalah\nHadiah Paling Mahal",
        "body": (
            "Klien yang ngasih kritik itu bukan musuh. Mereka adalah aset.\n\n"
            "Kritik pedas dari klien gue dulu bikin sakit hati. Tapi dari situlah "
            "kami benahi SOP, sistem, dan komunikasi.\n\n"
            "Bisnis yang gak pernah dikritik adalah bisnis yang gak pernah tumbuh."
        ),
        "footer": "@ukyhandoko • Founder StudioSoft",
    },
    {
        "nama": "sistem_bukan_orang",
        "judul": "Bisnis Itu Sistem,\nBukan Kumpulan Orang",
        "body": (
            "Banyak usaha mati karena 'orang kuncinya' pergi.\n\n"
            "Bisnis yang sehat adalah yang sistemnya jalan meskipun orangnya ganti.\n\n"
            "Dari pengalaman 10+ tahun, gue investasi banyak di SOP, dokumentasi, "
            "dan tools — biar bisnis gak tergantung satu orang pun."
        ),
        "footer": "@ukyhandoko • Founder StudioSoft",
    },
    {
        "nama": "social_proof",
        "judul": "Social Proof Itu\nBernilai Lebih dari Iklan",
        "body": (
            "Testimoni, case study, klien yang puas — ini 'iklan' paling ampuh.\n\n"
            "Karena orang lebih percaya sama pengalaman orang lain "
            "daripada janji manis di iklan.\n\n"
            "Makanya gue selalu minta testimoni & dokumentasi hasil kerja. "
            "Lebih effective daripada bom iklan."
        ),
        "footer": "studiosoft.id • Digital Growth Partner",
    },
]

# Jalankan
if __name__ == "__main__":
    print("🎨 gen_uky3.py — Generator 3 Background Threads @ukyhandoko")
    print(f"   List: {len(LIST_POSTINGAN)} konten × 3 background = {len(LIST_POSTINGAN)*3} file")
    gen_batch(LIST_POSTINGAN)
