#!/usr/bin/env python3
"""DMark Carousel v4 — Rapikan layout, nggak numpuk
Judul: 140px Poppins Bold
Deskripsi: 35px Poppins Regular
Spasi proporsional
"""

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

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

W, H = 1080, 1350
ORANGE = (255, 102, 0)
WHITE = (255, 255, 255)
DARK = (40, 40, 40)
LIGHT_ORANGE = (255, 237, 224)
SOFT_ORANGE = (255, 215, 180)
GRID_COLOR = (255, 245, 235)

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)
LABEL_FONT = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 28)

def wrap(draw, text, font, 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 and cur:
                lines.append(cur)
                cur = w
            else:
                cur = test
        if cur: lines.append(cur)
    return lines

def dr(draw, text, x, y, font, fill, max_w=920, ls=1.5):
    lines = wrap(draw, text, font, max_w)
    cy = y
    for line in lines:
        draw.text((x, 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 dc(draw, text, y, font, fill, max_w=920):
    lines = wrap(draw, text, font, max_w)
    ch = []
    for line in lines:
        b = draw.textbbox((0,0), line, font=font)
        ch.append((line, b[3]-b[1]))
    total = sum(lh+8 for _, lh in ch)
    cy = y - total//2
    for line, lh in ch:
        lw = draw.textbbox((0,0), line, font=font)[2]
        draw.text(((W-lw)//2, cy), line, font=font, fill=fill)
        cy += lh+8

def grid(draw, bg):
    if bg == WHITE:
        for y in range(0, H, 120):
            draw.line([(0,y),(W,y)], fill=GRID_COLOR, width=1)

def logo(draw, bg):
    c = (255,200,150) if bg == ORANGE else ORANGE
    draw.text((50, 50), "DMark  Creative", font=SMALL_FONT, fill=c)

# ===== SLIDE 1: COVER (Orange) =====
img = Image.new("RGB", (W, H), ORANGE)
draw = ImageDraw.Draw(img)
logo(draw, ORANGE)

dr(draw, "Digital Marketing", 90, 200, JUDUL_FONT, WHITE, 920, 1.3)
dr(draw, "untuk Klinik & RS", 90, 370, JUDUL_FONT, WHITE, 920, 1.3)
dr(draw, "Strategi Tepat Menjangkau Pasien", 90, 580, LABEL_FONT, SOFT_ORANGE, 920, 1.5)
dr(draw, "di Era Digital", 90, 630, LABEL_FONT, SOFT_ORANGE, 920, 1.5)
dc(draw, "dmark.id", H-100, SMALL_FONT, WHITE)
img.save(os.path.join(OUT_DIR, "01_cover.png"))

# ===== SLIDE 2: MENGAPA (Putih) — cuma 3 poin biar nggak numpuk =====
img = Image.new("RGB", (W, H), WHITE)
draw = ImageDraw.Draw(img)
grid(draw, WHITE)
logo(draw, WHITE)

dr(draw, "Mengapa Klinik & RS", 90, 120, JUDUL_FONT, ORANGE, 920, 1.3)
dr(draw, "Perlu Digital Marketing?", 90, 290, JUDUL_FONT, ORANGE, 920, 1.3)

poin = [
    ("01", "90% pasien cari info kesehatan online"),
    ("02", "Milenial & Gen Z pilih RS via review digital"),
    ("03", "Lebih efisien & kompetitif dibanding\nmedia konvensional"),
]
py = 520
for num, desc in poin:
    draw.text((90, py), num, font=NUM_FONT, fill=ORANGE)
    py = dr(draw, desc, 90, py+65, DESK_FONT, DARK, 880, 1.6) + 40

img.save(os.path.join(OUT_DIR, "02_mengapa.png"))

# ===== SLIDE 3: STRATEGI 1 (Orange) =====
img = Image.new("RGB", (W, H), ORANGE)
draw = ImageDraw.Draw(img)
logo(draw, ORANGE)

dr(draw, "Konten Edukasi", 90, 180, JUDUL_FONT, WHITE, 920, 1.3)
dr(draw, "& Branding", 90, 350, JUDUL_FONT, WHITE, 920, 1.3)

pt3 = [
    "▸  Artikel SEO untuk layanan medis",
    "▸  Testimoni pasien (video & teks)",
    "▸  Infografis informatif & mudah dibagikan",
    "▸  Konten edukatif di IG/FB",
]
py = 580
for pt in pt3:
    py = dr(draw, pt, 90, py, DESK_FONT, SOFT_ORANGE, 920, 1.7) + 20

dc(draw, "Strategi #1", H-100, LABEL_FONT, SOFT_ORANGE)
img.save(os.path.join(OUT_DIR, "03_strategi1.png"))

# ===== SLIDE 4: STRATEGI 2 (Putih) =====
img = Image.new("RGB", (W, H), WHITE)
draw = ImageDraw.Draw(img)
grid(draw, WHITE)
logo(draw, WHITE)

dr(draw, "Google & Sosial", 90, 180, JUDUL_FONT, ORANGE, 920, 1.3)
dr(draw, "Media Ads", 90, 350, JUDUL_FONT, ORANGE, 920, 1.3)

pt4 = [
    "▸  Google Ads untuk keyword kesehatan",
    "▸  Meta Ads targeting lokasi & demografis",
    "▸  Remarketing pasien potensial",
    "▸  Landing page + booking online",
]
py = 580
for pt in pt4:
    py = dr(draw, pt, 90, py, DESK_FONT, DARK, 920, 1.7) + 20

dc(draw, "Strategi #2", H-100, LABEL_FONT, ORANGE)
img.save(os.path.join(OUT_DIR, "04_strategi2.png"))

# ===== SLIDE 5: CTA (Orange) =====
img = Image.new("RGB", (W, H), ORANGE)
draw = ImageDraw.Draw(img)
logo(draw, ORANGE)

dc(draw, "Siap Kembangkan", 350, JUDUL_FONT, WHITE)
dc(draw, "Klinik atau RS", 530, JUDUL_FONT, WHITE)
dc(draw, "Anda?", 710, JUDUL_FONT, WHITE)

dc(draw, "Konsultasi GRATIS bersama tim DMark Creative", 870, LABEL_FONT, SOFT_ORANGE)
dc(draw, "Kami siapkan strategi digital marketing", 930, DESK_FONT, SOFT_ORANGE)

# Tombol WA
btn_w, btn_h = 440, 72
btn_x = (W - btn_w)//2
btn_y = 1010
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 icon
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))

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

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