#!/usr/bin/env python3
"""DMark Carousel — Listikel Tips (random jumlah tip)
Bg PUTIH (#FFFFFF), Teks ORANGE (#FF6A00)
Header: DMARK kiri + page number kanan
Footer: www.dmark.id kiri + hashtag kanan
Judul: Poppins Bold 120px, start y=170
Body: Poppins Regular 36px
Random jumlah tip per slide: 2-5 dari pool
"""

from PIL import Image, ImageDraw, ImageFont
import os, random

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

W, H = 1080, 1350
BG = (255, 255, 255)
TXT = (255, 106, 0)

FONT_DIR = os.path.expanduser("~/.fonts")
TITLE = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 120)
BODY = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 36)
BOLD24 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 24)
REG20 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 20)
REG22 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 22)
NUM = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 50)
SEMI = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-SemiBold.ttf"), 32)
COVER_FONT = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 160)

M = 35
NO = 75
MAX_W = W - M - 50  # 995px
JUDUL_START_Y = 170

# Pool tips — SEO, ide kreatif, bisnis populer, tren 2026
ALL_TIPS = [
    # SEO & Pencarian
    ("SEO Lokal", "Optimalkan Google My Business dan Google Maps untuk pelanggan di sekitar."),
    ("AI di SEO", "Manfaatkan AI untuk riset kata kunci dan optimasi konten otomatis."),
    ("Voice Search", "Optimasi konten untuk pencarian suara yang makin populer."),
    ("Featured Snippet", "Buat konten yang menjawab pertanyaan agar muncul di posisi nol Google."),
    ("SEO Konten", "Konten yang relevan dan panjang bikin website Anda naik peringkat."),
    ("Site Speed", "Website lemot bikin pengunjung kabur — percepat loading."),
    ("Mobile SEO", "Mayoritas pencarian dari HP — pastikan situs Anda mobile-friendly."),
    
    # Ide Kreatif & Konten
    ("Konten UGC", "Repost konten pelanggan — autentik dan gratis."),
    ("Behind the Scene", "Tunjukin proses di balik bisnis — lebih manusiawi dan dekat."),
    ("Konten Edukasi", "Bikin konten yang ngajarin sesuatu — disimpan, dibagikan."),
    ("Storytelling Brand", "Cerita brand yang jujur lebih menarik dari iklan sempurna."),
    ("Day in the Life", "Perlihatkan keseharian tim — personal branding yang kuat."),
    ("Challenge & Quiz", "Libatkan audiens dengan challenge seru atau kuis interaktif."),
    ("Mini Series", "Buat konten berseri biar audiens nungguin terus."),
    ("Meme Marketing", "Humor relevan yang relate dengan target pasar — viral potensial."),
    ("Trend Audio", "Gunakan audio viral di Reels/TikTok untuk jangkauan lebih luas."),
    ("Tutorial Kilat", "Tips cepat 15-30 detik yang langsung bisa dipraktekkin."),
    
    # Bisnis Populer & Tren
    ("Affiliate Marketing", "Jual lewat afiliasi — modal kecil, untung besar."),
    ("Dropship & Reseller", "Bisnis tanpa stok barang — cocok buat pemula."),
    ("Thrift & Pre-loved", "Bisnis barang second makin naik daun di kalangan muda."),
    ("F&B Digital", "UMKM kuliner wajib go digital — dari menu sampai promosi."),
    ("Jasa Digital", "Skill kayak desain, konten, dan admin jadi komoditas panas."),
    ("AI for Business", "Gunakan AI tools untuk otomatisasi kerja dan hemat waktu."),
    ("E-commerce Lokal", "Tokopedia, Shopee, TikTok Shop — kuasai semua kanal jualan."),
    ("Personal Branding", "Bangun personal brand biar orang percaya sama Anda."),
    ("Niche Market", "Fokus ke pasar spesifik — lebih mudah menang."),
    ("Side Hustle", "Bisnis sampingan dari HP — makin banyak yang sukses."),
    ("TikTok Shop", "Live streaming jualan lagi gencar — jangan dilewatkan."),
    ("Content Creator", "Kreator konten makin banyak, peluang kerja sama terbuka lebar."),
    
    # Strategi & Growth
    ("Kolaborasi Brand", "Kerja sama dengan brand lain buat jangkau audiens baru."),
    ("Giveaway Strategis", "Giveaway yang terarah — bukan asal bagi-bagi."),
    ("Retargeting", "Kejar yang udah lihat produk tapi belum beli."),
    ("Waktu Posting", "Posting di jam sibuk audiens — engagement naik drastis."),
    ("Konsistensi", "Lebih baik rutin daripada viral sekali lalu hilang."),
    ("Bangun Komunitas", "Bukan cuma follower — tapi komunitas yang aktif dan setia."),
]

SLIDE_TITLES = [
    "TIPS DIGITAL MARKETING",
    "AUDIENS DAN BRANDING",
    "SEO DAN KONTEN",
    "STRATEGI VISUAL",
    "IKLAN BERBAYAR",
    "EMAIL MARKETING",
    "DATA DAN ANALITIK",
    "KOLABORASI",
    "OPTIMALISASI",
    "LANGKAH KONKRIT",
]

HASHTAGS = [
    "#TipsDigital #DMARK",
    "#RisetPasar #DMARK",
    "#SEO #DMARK",
    "#KontenKreatif #DMARK",
    "#PaidAds #DMARK",
    "#EmailMarketing #DMARK",
    "#DataDriven #DMARK",
    "#Influencer #DMARK",
    "#Growth #DMARK",
    "#DigitalMarketing #DMARK",
]

def wrap_text(draw, text, font, max_w=MAX_W):
    lines = []
    for para in text.split("\n"):
        words = para.split()
        cur = ""
        for w in words:
            test = cur + " " + w if cur else w
            if draw.textbbox((0,0), test, font=font)[2] > max_w - 30 and cur:
                lines.append(cur)
                cur = w
            else:
                cur = test
        if cur: lines.append(cur)
    return lines

def draw_title(draw, texts, start_y, font=TITLE, fill=TXT, max_w=MAX_W, ls=1.3):
    all_lines = []
    for t in texts:
        all_lines.extend(wrap_text(draw, t, font, max_w))
    cy = start_y
    for line in all_lines:
        draw.text((M, cy), line, font=font, fill=fill)
        lh = draw.textbbox((0,0), line, font=font)[3] - draw.textbbox((0,0), line, font=font)[1]
        cy += int(lh * ls)
    return cy

def header(draw, page):
    draw.text((M, M), "DMARK", font=BOLD24, fill=TXT)
    draw.text((W - M, M), page, font=REG22, fill=TXT, anchor="rt")

def footer(draw, left="www.dmark.id", right=""):
    fy = H - 55
    draw.text((M, fy), left, font=REG20, fill=TXT)
    if right:
        draw.text((W - M, fy), right, font=REG20, fill=TXT, anchor="rt")

def new_slide():
    return Image.new("RGB", (W, H), BG)

# ===== SLIDE 1: COVER =====
d = ImageDraw.Draw(new_slide())
header(d, "01/10")
ey = draw_title(d, ["TIPS DIGITAL", "MARKETING"], JUDUL_START_Y + 40, COVER_FONT)
cy = ey + 150
d.text((M, cy), "Ingin mengembangkan bisnis Anda di era digital?", font=BODY, fill=TXT)
cy += 48
d.text((M, cy), "Kami hadirkan tips digital marketing yang bisa", font=BODY, fill=TXT)
cy += 48
d.text((M, cy), "langsung Anda terapkan. Dari DMARK untuk Anda.", font=BODY, fill=TXT)
footer(d, "www.dmark.id", "#TipsDigital #DMARK")
d._image.save(os.path.join(OUT_DIR, "01_cover.png"))

# ===== SLIDE 2-10: Random Tips =====
random.seed()
used_tips = set()

for i in range(2, 11):
    d = ImageDraw.Draw(new_slide())
    page = f"{i:02d}/10"
    header(d, page)
    
    title_text = [SLIDE_TITLES[i-2]]
    ey = draw_title(d, title_text, JUDUL_START_Y)
    cy = ey + 120
    
    # Pilih random tips (2-5) dari pool yang belum dipakai
    available = [t for t in ALL_TIPS if t[0] not in used_tips]
    if len(available) < 2:
        used_tips.clear()
        available = ALL_TIPS
    
    n_tips = min(random.randint(2, 5), len(available))
    selected = random.sample(available, n_tips)
    
    for tip_title, tip_desc in selected:
        used_tips.add(tip_title)
        num = f"{selected.index((tip_title, tip_desc)) + 1:02d}" if selected else "01"
        # Pake index asli
        idx = selected.index((tip_title, tip_desc))
        num = f"{idx + 1:02d}"
        
        d.text((M, cy + 5), num, font=NUM, fill=TXT)
        d.text((M + NO, cy + 2), tip_title, font=SEMI, fill=TXT)
        cy += 55
        lines = wrap_text(d, tip_desc, BODY, 1000)
        for line in lines:
            d.text((M + NO, cy), line, font=BODY, fill=TXT)
            cy += 44
        cy += 40
    
    footer(d, "www.dmark.id", HASHTAGS[i-2])
    fname = f"slide_{i:02d}.png"
    d._image.save(os.path.join(OUT_DIR, fname))

print(f"✅ Slide listikel tips (random) selesai! File di: {OUT_DIR}")
for f in sorted(os.listdir(OUT_DIR)):
    print(f"  {f}")
