#!/usr/bin/env python3
"""DMark Carousel Generator v2 — Revisi ukuran font
Judul: 70px, weight 600 bold
Deskripsi: 35px, weight 300 regular
Rata kiri. Space antar elemen.
"""

from PIL import Image, ImageDraw, ImageFont
import os

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

W, H = 1080, 1350
ORANGE = (255, 102, 0)
WHITE = (255, 255, 255)
DARK = (50, 50, 50)
GRAY = (120, 120, 120)
LIGHT_ORANGE = (255, 237, 224)
LIGHT_ORANGE_BG = (255, 247, 238)

TTC_PATH = "/tmp/Inter.ttc"

def get_inter(size, index=0):
    return ImageFont.truetype(TTC_PATH, size, index=index)

# Inter TTC index:
# 0 = Regular (weight ~400)
# Untuk weight 600 (SemiBold), kita coba skala lebih besar di index yang sesuai
# Untuk weight 300 (Light), kita coba index tertentu
# Yang variable font perlu index 1
VAR_PATH = "/tmp/Inter-Variable.ttf"

# Coba variable font dulu kl ada
if os.path.exists(VAR_PATH):
    # Variable font — kita naikin size sedikit biar keliatan boldnya
    FONT_JUDUL = ImageFont.truetype(VAR_PATH, 70)  # weight 600
    FONT_DESK = ImageFont.truetype(VAR_PATH, 35)
    FONT_NUM = ImageFont.truetype(VAR_PATH, 50)
    FONT_SMALL = ImageFont.truetype(VAR_PATH, 25)
else:
    # Fallback ke TTC — Inter Regular di berbagai ukuran
    FONT_JUDUL = ImageFont.truetype(TTC_PATH, 65, index=0)
    FONT_DESK = ImageFont.truetype(TTC_PATH, 33, index=0)
    FONT_NUM = ImageFont.truetype(TTC_PATH, 48, index=0)
    FONT_SMALL = ImageFont.truetype(TTC_PATH, 24, index=0)

FONT_CTA_TITLE = ImageFont.truetype(TTC_PATH if not os.path.exists(VAR_PATH) else VAR_PATH, 
                                      70 if os.path.exists(VAR_PATH) else 65, 
                                      index=0)
FONT_CTA_BODY = ImageFont.truetype(TTC_PATH if not os.path.exists(VAR_PATH) else VAR_PATH, 
                                     35 if os.path.exists(VAR_PATH) else 33, 
                                     index=0)

LOGIN_FONT = get_inter(20, 0)
BIG_NUM_FONT = get_inter(50, 0)

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

def draw_left_text(draw, text, x, y, font, fill, max_w=920, line_spacing=1.5):
    """Draw left-aligned text."""
    lines = wrap_text(draw, text, font, max_w)
    cur_y = y
    for line in lines:
        draw.text((x, cur_y), line, font=font, fill=fill)
        bbox = draw.textbbox((0, 0), line, font=font)
        cur_y += int((bbox[3] - bbox[1]) * line_spacing)
    return cur_y  # return end y

def draw_centered(draw, text, y, font, fill, max_w=920):
    """Draw centered text with word wrap."""
    lines = wrap_text(draw, text, font, max_w)
    total_h = 0
    line_hs = []
    for line in lines:
        bbox = draw.textbbox((0, 0), line, font=font)
        lh = bbox[3] - bbox[1] + 8
        total_h += lh
        line_hs.append((line, lh))
    
    cur_y = y - total_h // 2
    for line, lh in line_hs:
        bbox = draw.textbbox((0, 0), line, font=font)
        lw = bbox[2] - bbox[0]
        x = (W - lw) // 2
        draw.text((x, cur_y), line, font=font, fill=fill)
        cur_y += lh

def make_bg(background):
    img = Image.new("RGB", (W, H), background)
    draw = ImageDraw.Draw(img)
    if background == WHITE:
        # subtle grid
        gc = (255, 247, 238)
        for y in range(0, H, 100):
            draw.line([(0, y), (W, y)], fill=gc, width=1)
    return img, draw

def copy_to(filename, label):
    """Save and send to Telegram via message tool note"""
    path = os.path.join(OUT_DIR, filename)
    return path

# =============================================
# SLIDE 1: COVER — Orange
# =============================================
img, draw = make_bg(ORANGE)
draw.text((50, 50), "DMark  Creative", font=LOGIN_FONT, fill=(255, 200, 150))

# Judul (rata kiri, start 180px dari atas)
y = 180
y = draw_left_text(draw, "Digital Marketing", 90, y, FONT_JUDUL, WHITE, 920, 1.6)
y = draw_left_text(draw, "untuk Klinik & RS", 90, y + 15, FONT_JUDUL, WHITE, 920, 1.6)

# Deskripsi
draw_left_text(draw, "Strategi Tepat Menjangkau Pasien", 90, y + 90, FONT_DESK, LIGHT_ORANGE, 920, 1.8)
draw_left_text(draw, "di Era Digital", 90, y + 120, FONT_DESK, LIGHT_ORANGE, 920, 1.8)

draw_centered(draw, "dmark.id", H - 100, FONT_SMALL, WHITE)
img.save(os.path.join(OUT_DIR, "01_cover.png"))

# =============================================
# SLIDE 2: MENGAPA — White
# =============================================
img, draw = make_bg(WHITE)
draw.text((50, 50), "DMark  Creative", font=LOGIN_FONT, fill=ORANGE)

y = 120
draw_left_text(draw, "Mengapa Klinik & RS", 90, y, FONT_JUDUL, ORANGE, 920, 1.6)
y += draw_left_text(draw, "Perlu Digital Marketing?", 90, y + 70, FONT_JUDUL, ORANGE, 920, 1.6) + 40

poin = [
    ("01", "90% pasien cari informasi kesehatan secara online"),
    ("02", "Milenial & Gen Z pilih RS berdasarkan\nreview digital"),
    ("03", "Kompetitor sudah online — yang duluan\njadi pilihan utama"),
    ("04", "Biaya iklan digital lebih efisien\ndaripada media konvensional"),
]

py = y + 20
for num, desc in poin:
    # number
    draw.text((90, py), num, font=BIG_NUM_FONT, fill=ORANGE)
    # description
    py2 = draw_left_text(draw, desc, 90, py + 60, FONT_DESK, DARK, 880, 1.6)
    py = py2 + 20

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

# =============================================
# SLIDE 3: STRATEGI 1 — Orange
# =============================================
img, draw = make_bg(ORANGE)
draw.text((50, 50), "DMark  Creative", font=LOGIN_FONT, fill=(255, 200, 150))

y = 100
draw_left_text(draw, "Strategi #1", 90, y, FONT_SMALL, LIGHT_ORANGE, 920, 1.4)
y += 50
draw_left_text(draw, "Konten Edukasi", 90, y, FONT_JUDUL, WHITE, 920, 1.6)
draw_left_text(draw, "& Branding", 90, y + 80, FONT_JUDUL, WHITE, 920, 1.6)

poin3 = [
    "▸  Artikel SEO tentang kesehatan & layanan medis",
    "▸  Testimoni pasien — video dan teks",
    "▸  Infografis layanan yang informatif & shareable",
    "▸  Konten IG/FB: edukatif & membangun kepercayaan",
]

py = y + 200
for pt in poin3:
    py = draw_left_text(draw, pt, 90, py, FONT_DESK, LIGHT_ORANGE, 920, 1.8) + 30

img.save(os.path.join(OUT_DIR, "03_strategi1.png"))

# =============================================
# SLIDE 4: STRATEGI 2 — White
# =============================================
img, draw = make_bg(WHITE)
draw.text((50, 50), "DMark  Creative", font=LOGIN_FONT, fill=ORANGE)

y = 100
draw_left_text(draw, "Strategi #2", 90, y, FONT_SMALL, ORANGE, 920, 1.4)
y += 50
draw_left_text(draw, "Google & Sosial", 90, y, FONT_JUDUL, ORANGE, 920, 1.6)
draw_left_text(draw, "Media Ads", 90, y + 80, FONT_JUDUL, ORANGE, 920, 1.6)

poin4 = [
    "▸  Google Ads untuk keyword kesehatan (SEO+)",
    "▸  Meta Ads targeting lokasi & demografis",
    "▸  Remarketing pasien potensial",
    "▸  Landing page optimal + booking online",
]

py = y + 200
for pt in poin4:
    py = draw_left_text(draw, pt, 90, py, FONT_DESK, DARK, 920, 1.8) + 30

img.save(os.path.join(OUT_DIR, "04_strategi2.png"))

# =============================================
# SLIDE 5: CTA — Orange
# =============================================
img, draw = make_bg(ORANGE)
draw.text((50, 50), "DMark  Creative", font=LOGIN_FONT, fill=(255, 200, 150))

# Judul di tengah
cy = H // 2 - 120
draw_centered(draw, "Siap Kembangkan", cy, FONT_JUDUL, WHITE)
draw_centered(draw, "Klinik atau RS Anda?", cy + 85, FONT_JUDUL, WHITE)

# Deskripsi
draw_centered(draw, "Konsultasi GRATIS dengan tim DMark Creative\nKami bantu strategi digital marketing yang tepat\nuntuk fasilitas kesehatan Anda", cy + 220, FONT_DESK, LIGHT_ORANGE)

# Tombol WhatsApp
btn_w, btn_h = 420, 68
btn_x = (W - btn_w) // 2
btn_y = cy + 400
draw.rounded_rectangle([btn_x, btn_y, btn_x + btn_w, btn_y + btn_h], radius=34, fill=WHITE)
# Text di tombol
draw.text((btn_x + btn_w//2 + 20, btn_y + btn_h//2 - 10), "Hubungi Kami", font=FONT_DESK, fill=ORANGE, anchor="mm")
# WA icon (green circle simplified)
import math
cx, cy2 = btn_x + 50, btn_y + btn_h // 2
for ang in range(360):
    rad = math.radians(ang)
    px = int(cx + 16 * math.cos(rad))
    py2 = int(cy2 + 16 * math.sin(rad))
    if 0 <= px < W and 0 <= py2 < H:
        img.putpixel((px, py2), (37, 211, 102))

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

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