#!/usr/bin/env python3
"""DMark Carousel v3 — Poppins font
Judul: 140px Poppins Bold, rata kiri
Deskripsi: 35px Poppins Regular
Space antar elemen
"""

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

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

W, H = 1080, 1350
ORANGE = (255, 102, 0)
WHITE = (255, 255, 255)
DARK = (40, 40, 40)
GRAY = (100, 100, 100)
LIGHT_ORANGE = (255, 237, 224)
SOFT_ORANGE = (255, 220, 190)

FONT_DIR = os.path.expanduser("~/.fonts")
JUDUL_FONT = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 140)
DESK_FONT = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 35)
SMALL_FONT = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 22)
NUM_FONT = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-SemiBold.ttf"), 50)
CTA_FONT = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-SemiBold.ttf"), 32)

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

def draw_left(draw, text, x, y, font, fill, max_w=920, line_sp=1.5):
    lines = wrap_text(draw, text, font, max_w)
    cy = y
    for line in lines:
        draw.text((x, cy), line, font=font, fill=fill)
        cy += int((draw.textbbox((0, 0), line, font=font)[3] - draw.textbbox((0, 0), line, font=font)[1]) * line_sp)
    return cy

def draw_center(draw, text, y, font, fill, max_w=920):
    lines = wrap_text(draw, text, font, max_w)
    lh_list = []
    for line in lines:
        bbox = draw.textbbox((0, 0), line, font=font)
        lh_list.append((line, bbox[3] - bbox[1]))
    total = sum(lh + 8 for _, lh in lh_list)
    cy = y - total // 2
    for line, lh in lh_list:
        lw = draw.textbbox((0, 0), line, font=font)[2]
        draw.text(((W - lw)//2, cy), line, font=font, fill=fill)
        cy += lh + 8

def make_slide(bg, logo_text, logo_fill, items, filename):
    """items = [(type, args...)] where type = 'title', 'desc', 'num', 'center'"""
    img = Image.new("RGB", (W, H), bg)
    draw = ImageDraw.Draw(img)
    
    # Subtle grid on white
    if bg == WHITE:
        gc = (255, 247, 238)
        for y in range(0, H, 100):
            draw.line([(0, y), (W, y)], fill=gc, width=1)
    
    # Logo
    draw.text((50, 50), logo_text, font=SMALL_FONT, fill=logo_fill)
    
    for item in items:
        t = item[0]
        if t == "title":
            # (text, y)
            draw_left(draw, item[1], 90, item[2], JUDUL_FONT, item[3] if len(item) > 3 else (ORANGE if bg == WHITE else WHITE), 920, 1.4)
        elif t == "desc":
            # (text, y, fill?)
            fill = item[3] if len(item) > 3 else GRAY
            draw_left(draw, item[1], 90, item[2], DESK_FONT, fill, 920, 1.7)
        elif t == "num_desc":
            # (num, desc, y)
            draw.text((90, item[3]), item[1], font=NUM_FONT, fill=ORANGE if bg == WHITE else SOFT_ORANGE)
            fill = DARK if bg == WHITE else SOFT_ORANGE
            draw_left(draw, item[2], 90, item[3] + 60, DESK_FONT, fill, 880, 1.6)
        elif t == "bullet":
            fill = item[3] if len(item) > 3 else GRAY
            draw_left(draw, item[1], 90, item[2], DESK_FONT, fill, 920, 1.7)
        elif t == "center":
            fill = item[3] if len(item) > 3 else WHITE
            draw_center(draw, item[1], item[2], item[4] if len(item) > 4 else DESK_FONT, fill)
    
    path = os.path.join(OUT_DIR, filename)
    img.save(path)
    return path

# ===== SLIDE 1: COVER =====
items1 = [
    ("title", "Digital Marketing", 200, WHITE),
    ("title", "untuk Klinik & RS", 380, WHITE),
    ("desc", "Strategi Tepat Menjangkau Pasien", 600, LIGHT_ORANGE),
    ("desc", "di Era Digital", 660, LIGHT_ORANGE),
    ("center", "dmark.id", H - 100, WHITE, SMALL_FONT),
]
make_slide(ORANGE, "DMark  Creative", (255,200,150), items1, "01_cover.png")

# ===== SLIDE 2: MENGAPA =====
items2 = [
    ("title", "Mengapa Klinik & RS", 120, ORANGE),
    ("title", "Perlu Digital Marketing?", 300, ORANGE),
    ("num_desc", "01", "90% pasien cari informasi kesehatan\nsecara online", 540),
    ("num_desc", "02", "Milenial & Gen Z pilih RS berdasarkan\nreview digital", 790),
    ("num_desc", "03", "Kompetitor sudah online — yang duluan\njadi pilihan utama", 1040),
    ("num_desc", "04", "Biaya iklan digital lebih efisien\ndaripada media konvensional", 1290),
]
make_slide(WHITE, "DMark  Creative", ORANGE, items2, "02_mengapa.png")

# ===== SLIDE 3: STRATEGI 1 =====
items3 = [
    ("desc", "Strategi #1", 120, SOFT_ORANGE),
    ("title", "Konten Edukasi", 200, WHITE),
    ("title", "& Branding", 380, WHITE),
    ("bullet", "▸  Artikel SEO tentang kesehatan\n    & layanan medis", 600, LIGHT_ORANGE),
    ("bullet", "▸  Testimoni pasien — video\n    dan teks", 730, LIGHT_ORANGE),
    ("bullet", "▸  Infografis layanan yang\n    informatif & shareable", 860, LIGHT_ORANGE),
    ("bullet", "▸  Konten IG/FB: edukatif\n    & membangun kepercayaan", 990, LIGHT_ORANGE),
]
make_slide(ORANGE, "DMark  Creative", (255,200,150), items3, "03_strategi1.png")

# ===== SLIDE 4: STRATEGI 2 =====
items4 = [
    ("desc", "Strategi #2", 120, ORANGE),
    ("title", "Google & Sosial", 200, ORANGE),
    ("title", "Media Ads", 380, ORANGE),
    ("bullet", "▸  Google Ads untuk keyword\n    kesehatan (SEO+)", 600, DARK),
    ("bullet", "▸  Meta Ads targeting lokasi\n    & demografis", 730, DARK),
    ("bullet", "▸  Remarketing pasien\n    potensial", 860, DARK),
    ("bullet", "▸  Landing page optimal\n    + booking online", 990, DARK),
]
make_slide(WHITE, "DMark  Creative", ORANGE, items4, "04_strategi2.png")

# ===== SLIDE 5: CTA =====
img = Image.new("RGB", (W, H), ORANGE)
draw = ImageDraw.Draw(img)
draw.text((50, 50), "DMark  Creative", font=SMALL_FONT, fill=(255,200,150))

# Subtle pattern
for y in range(0, H, 100):
    draw.line([(0, y), (W, y)], fill=(255, 112, 15), width=1)

cy = H // 2 - 150
draw_center(draw, "Siap Kembangkan", cy, JUDUL_FONT, WHITE)
draw_center(draw, "Klinik atau RS", cy + 170, JUDUL_FONT, WHITE)
draw_center(draw, "Anda?", cy + 340, JUDUL_FONT, WHITE)

draw_center(draw, "Konsultasi GRATIS dengan tim DMark Creative", cy + 480, DESK_FONT, SOFT_ORANGE)
draw_center(draw, "Kami bantu strategi digital marketing yang tepat", cy + 530, DESK_FONT, SOFT_ORANGE)
draw_center(draw, "untuk fasilitas kesehatan Anda", cy + 580, DESK_FONT, SOFT_ORANGE)

# Tombol WA
btn_w, btn_h = 440, 72
btn_x = (W - btn_w) // 2
btn_y = cy + 640
draw.rounded_rectangle([btn_x, btn_y, btn_x+btn_w, btn_y+btn_h], radius=36, fill=WHITE)
draw.text((btn_x + btn_w//2 + 22, btn_y + btn_h//2 - 8), "Hubungi Kami", font=CTA_FONT, fill=ORANGE, anchor="mm")

# WA green circle
cx, cwy = btn_x + 52, btn_y + btn_h//2
for ang in range(360):
    rad = math.radians(ang)
    px = int(cx + 17 * math.cos(rad))
    py = int(cwy + 17 * math.sin(rad))
    if 0 <= px < W and 0 <= py < H:
        img.putpixel((px, py), (37, 211, 102))

draw_center(draw, "dmark.id", H - 80, SMALL_FONT, WHITE)
img.save(os.path.join(OUT_DIR, "05_cta.png"))

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