#!/usr/bin/env python3
"""DMark Carousel — 10 Slide Listikel Tips
Bg PUTIH, Teks ORANGE
Judul: Poppins Bold 100px (biar muat)
Deskripsi: Poppins Regular 36px
Tema: Tips Digital Marketing
"""

from PIL import Image, ImageDraw, ImageFont
import os

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 = (249, 115, 22)

FONT_DIR = os.path.expanduser("~/.fonts")
TITLE = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 100)
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)
CHECK = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 32)

M = 30
NO = 70  # offset buat nomor listikel

def wrap_text(draw, text, font, max_w=920):
    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 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=920, 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 draw_body(draw, texts, start_y, font=BODY, fill=TXT, max_w=920, ls=1.5):
    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 - 65
    draw.text((M, fy), left, font=REG20, fill=TXT)
    if right:
        draw.text((W - M, fy), right, font=REG20, fill=TXT, anchor="rt")

def divider(draw, y, width=280):
    xs, xe = M, M + width
    dash, gap = 14, 10
    x = xs
    while x < xe:
        e = min(x + dash, xe)
        draw.line([(x, y), (e, y)], fill=TXT, width=2)
        x += dash + gap
    return y + 30

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

def tip_slide(page, title, tips, hashtag=""):
    d = ImageDraw.Draw(new_slide()); header(d, page)
    ey = draw_title(d, title, 180)
    cy = ey + 100
    for i, (t, desc) in enumerate(tips):
        i1 = str(i+1).zfill(2)
        d.text((M, cy + 5), i1, font=NUM, fill=TXT)
        d.text((M + NO, cy + 2), t, font=ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-SemiBold.ttf"), 32), fill=TXT)
        cy += 50
        d.text((M + NO, cy), desc, font=BODY, fill=TXT)
        cy += 90
    footer(d, "www.dmark.id", hashtag)
    d._image.save(os.path.join(OUT_DIR, page.replace("/", "_") + ".png"))

# ===== SLIDE 1: COVER =====
d = ImageDraw.Draw(new_slide()); header(d, "01/10")
ey = draw_title(d, ["10 TIPS DIGITAL", "MARKETING"], 200)
ey = divider(d, ey + 20)
draw_body(d, ["Strategi jitu untuk mengembangkan", "bisnis Anda di era digital.", "Dari DMARK untuk Anda."], ey + 60)
footer(d, "www.dmark.id", "#DMARK #TipsDigital #DigitalMarketing #10Tips")
d._image.save(os.path.join(OUT_DIR, "01_cover.png"))

# ===== SLIDE 2-10: Tips =====
tips_data = [
    ("02/10", ["KENALI AUDIENS ANDA"],
     [("Riset Audiens", "Pahami demografi, minat, dan kebiasaan target pasar."),
      ("Persona Buyer", "Buat profil pelanggan ideal untuk strategi yang lebih tepat."),
      ("Social Listening", "Pantau percakapan online tentang brand dan kompetitor.")],
     "#DMARK #RisetPasar"),
    
    ("03/10", ["KONSISTENSI BRANDING"],
     [("Identitas Visual", "Logo, warna, font yang seragam di semua platform."),
      ("Tone of Voice", "Pilih karakter brand: formal, santai, atau quirky."),
      ("Storytelling", "Cerita yang konsisten membangun kepercayaan pelanggan.")],
     "#DMARK #Branding"),
    
    ("04/10", ["OPTIMALKAN SEO"],
     [("Keyword Research", "Cari kata kunci yang relevan dengan bisnis Anda."),
      ("Konten Berkualitas", "Artikel dan halaman yang informatif dan bermanfaat."),
      ("Technical SEO", "Kecepatan situs, mobile friendly, struktur URL yang rapi.")],
     "#DMARK #SEO #DigitalMarketing"),
    
    ("05/10", ["KONTEN VISUAL", "BERKUALITAS"],
     [("Desain Profesional", "Gunakan template yang rapi dan tipografi yang jelas."),
      ("Video Marketing", "Konten video pendek sangat efektif di media sosial."),
      ("Infografis", "Sajikan data kompleks dengan visual yang mudah dicerna.")],
     "#DMARK #KontenKreatif"),
    
    ("06/10", ["IKLAN BERBAYAR", "(PAID ADS)"],
     [("Google Ads", "Target audiens yang sedang mencari produk Anda."),
      ("Meta Ads", "Jangkau audiens potensial di IG dan Facebook."),
      ("Retargeting", "Kejar pengunjung yang sudah tertarik tapi belum membeli.")],
     "#DMARK #Iklan #PaidAds"),
    
    ("07/10", ["EMAIL MARKETING"],
     [("Newsletter", "Kirim update rutin ke subscriber dengan konten bernilai."),
      ("Segmentasi", "Pisahkan audiens berdasarkan minat dan perilaku."),
      ("Automasi", "Kirim email otomatis di momen yang tepat (welcome, promo).")],
     "#DMARK #EmailMarketing"),
    
    ("08/10", ["MANFAATKAN DATA", "DAN ANALITIK"],
     [("Pantau KPI", "Analisa metrik seperti reach, engagement, dan konversi."),
      ("A/B Testing", "Uji dua versi konten untuk temukan yang paling efektif."),
      ("Dashboard", "Buat laporan berkala untuk evaluasi strategi marketing.")],
     "#DMARK #DataDriven"),
    
    ("09/10", ["COLLABORATION", "DAN INFLUENCER"],
     [("Pilih Influencer", "Cari yang relevan dengan niche dan audiens bisnis Anda."),
      ("Micro Influencer", "Engagement lebih tinggi, biaya lebih terjangkau."),
      ("User Generated", "Ajak pelanggan buat konten tentang brand Anda.")],
     "#DMARK #Influencer"),
    
    ("10/10", ["EVALUASI DAN", "OPTIMALISASI"],
     [("Review Rutin", "Evaluasi strategi setiap bulan, bukan setahun sekali."),
      ("Iterasi Cepat", "Jangan takut gagal — yang penting belajar dan adaptasi."),
      ("Tetap Update", "Ikuti tren digital marketing terbaru dan sesuaikan strategi.")],
     "#DMARK #Optimalisasi #Growth"),
]

titles_map = {
    "02/10": "kenali_audiens",
    "03/10": "konsistensi_branding",
    "04/10": "optimalkan_seo",
    "05/10": "konten_visual",
    "06/10": "iklan_berbayar",
    "07/10": "email_marketing",
    "08/10": "data_analitik",
    "09/10": "kolaborasi_influencer",
    "10/10": "evaluasi_optimasi",
}

for page, title, tips, htag in tips_data:
    d = ImageDraw.Draw(new_slide()); header(d, page)
    ey = draw_title(d, title, 140)
    cy = ey + 100
    for i, (t, desc) in enumerate(tips):
        # Nomor 01, 02, 03
        d.text((M, cy + 5), f"{i+1:02d}", font=NUM, fill=TXT)
        # Judul tip — SemiBold 32px
        d.text((M + NO, cy + 2), t, font=ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-SemiBold.ttf"), 32), fill=TXT)
        cy += 55
        # Deskripsi — Regular 36px
        lines = wrap_text(d, desc, BODY, 950)
        for line in lines:
            d.text((M + NO, cy), line, font=BODY, fill=TXT)
            cy += 42
        cy += 30
    footer(d, "www.dmark.id", htag)
    fname = titles_map.get(page, page.replace("/", "_")) + ".png"
    d._image.save(os.path.join(OUT_DIR, fname))

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