#!/usr/bin/env python3
"""
Create Yasma Natura carousel: Kolagen vs Glutathione
Background: Pexels photo, Overlay: DMark White template style
Output: 1080x1350 WebP
"""
from PIL import Image, ImageDraw, ImageFont, ImageFilter, ImageEnhance
import os

# ========== SPECS (DMark White Template adapted for Yasma) ==========
W, H = 1080, 1350
MARGIN_L, MARGIN_R = 90, 50
MARGIN_T, MARGIN_B = 50, 60
MAX_W = W - MARGIN_L - MARGIN_R  # ~940px

ORANGE = (255, 106, 0, 255)
WHITE = (255, 255, 255, 255)
BLACK = (0, 0, 0, 255)

# Font paths (adjust if needed)
FONT_DIR = "/usr/share/fonts/truetype"
try:
    POPPINS_BOLD = ImageFont.truetype(f"{FONT_DIR}/dejavu/DejaVuSans-Bold.ttf", 128)
    POPPINS_BOLD_85 = ImageFont.truetype(f"{FONT_DIR}/dejavu/DejaVuSans-Bold.ttf", 85)
    POPPINS_BOLD_44 = ImageFont.truetype(f"{FONT_DIR}/dejavu/DejaVuSans-Bold.ttf", 44)
    POPPINS_SEMIBOLD_28 = ImageFont.truetype(f"{FONT_DIR}/dejavu/DejaVuSans-Bold.ttf", 28)
    POPPINS_REG_32 = ImageFont.truetype(f"{FONT_DIR}/dejavu/DejaVuSans.ttf", 32)
    POPPINS_REG_20 = ImageFont.truetype(f"{FONT_DIR}/dejavu/DejaVuSans.ttf", 20)
    POPPINS_BOLD_22 = ImageFont.truetype(f"{FONT_DIR}/dejavu/DejaVuSans-Bold.ttf", 22)
    POPPINS_REG_22 = ImageFont.truetype(f"{FONT_DIR}/dejavu/DejaVuSans.ttf", 22)
except:
    # Fallback
    POPPINS_BOLD = ImageFont.load_default()
    POPPINS_BOLD_85 = ImageFont.load_default()
    POPPINS_BOLD_44 = ImageFont.load_default()
    POPPINS_SEMIBOLD_28 = ImageFont.load_default()
    POPPINS_REG_32 = ImageFont.load_default()
    POPPINS_REG_20 = ImageFont.load_default()
    POPPINS_BOLD_22 = ImageFont.load_default()
    POPPINS_REG_22 = ImageFont.load_default()

def load_and_prep_bg(img_path):
    """Load, crop center to 1080x1350, add slight dark overlay for text readability"""
    img = Image.open(img_path).convert("RGBA")
    # Center crop to 1080x1350
    src_w, src_h = img.size
    target_ratio = W / H
    src_ratio = src_w / src_h
    
    if src_ratio > target_ratio:
        # Source is wider, crop width
        new_h = src_h
        new_w = int(src_h * target_ratio)
        left = (src_w - new_w) // 2
        top = 0
    else:
        # Source is taller, crop height
        new_w = src_w
        new_h = int(src_w / target_ratio)
        left = 0
        top = (src_h - new_h) // 2
    
    img = img.crop((left, top, left + new_w, top + new_h))
    img = img.resize((W, H), Image.LANCZOS)
    
    # Add dark overlay for text readability (30% opacity black)
    overlay = Image.new("RGBA", (W, H), (0, 0, 0, 76))  # ~30% opacity
    img = Image.alpha_composite(img, overlay)
    
    return img

def wrap_text(draw, text, font, max_width):
    """Wrap text to fit max_width, return list of lines"""
    words = text.split()
    lines = []
    current = []
    
    for word in words:
        test = " ".join(current + [word])
        bbox = draw.textbbox((0, 0), test, font=font)
        w = bbox[2] - bbox[0]
        if w <= max_width:
            current.append(word)
        else:
            if current:
                lines.append(" ".join(current))
            current = [word]
    if current:
        lines.append(" ".join(current))
    return lines

def draw_header_footer(draw, page_num, total_pages):
    """Draw DMark style header & footer"""
    # Header: "YASMA NATURA" kiri atas
    draw.text((MARGIN_L, MARGIN_T), "YASMA NATURA", font=POPPINS_BOLD_22, fill=ORANGE)
    # Page number kanan atas
    page_text = f"{page_num}/{total_pages}"
    bbox = draw.textbbox((0, 0), page_text, font=POPPINS_REG_22)
    draw.text((W - MARGIN_R - (bbox[2] - bbox[0]), MARGIN_T), page_text, font=POPPINS_REG_22, fill=ORANGE)
    
    # Footer: website kiri bawah
    draw.text((MARGIN_L, H - MARGIN_B - 20), "www.yasmanatura.co.id", font=POPPINS_REG_20, fill=ORANGE)
    # Hashtag kanan bawah
    hashtag = "#YasmaNatura #MaklonMinuman"
    bbox = draw.textbbox((0, 0), hashtag, font=POPPINS_REG_20)
    draw.text((W - MARGIN_R - (bbox[2] - bbox[0]), H - MARGIN_B - 20), hashtag, font=POPPINS_REG_20, fill=ORANGE)

def create_slide_1():
    """Cover: Judul besar, deskripsi, vertikal middle"""
    img = load_and_prep_bg("pexels_raw.jpg")
    draw = ImageDraw.Draw(img)
    
    # Content area (between header & footer)
    content_top = MARGIN_T + 40
    content_bottom = H - MARGIN_B - 40
    content_height = content_bottom - content_top
    content_center_y = content_top + content_height // 2
    
    # Title: "Kolagen vs Glutathione"
    title = "Kolagen vs Glutathione"
    lines = wrap_text(draw, title, POPPINS_BOLD, MAX_W)
    
    # Calculate total height of title + divider + subtitle
    line_h = POPPINS_BOLD.getbbox("A")[3] - POPPINS_BOLD.getbbox("A")[1] + 10
    title_h = len(lines) * line_h
    
    subtitle = "Mana yang Lebih Cocok untuk\nBrand Kecantikan Anda?"
    sub_lines = wrap_text(draw, subtitle, POPPINS_REG_32, MAX_W)
    sub_line_h = POPPINS_REG_32.getbbox("A")[3] - POPPINS_REG_32.getbbox("A")[1] + 8
    subtitle_h = len(sub_lines) * sub_line_h
    
    divider_h = 20
    total_h = title_h + divider_h + subtitle_h
    start_y = content_center_y - total_h // 2
    
    # Draw title
    y = start_y
    for line in lines:
        bbox = draw.textbbox((0, 0), line, font=POPPINS_BOLD)
        draw.text((MARGIN_L, y), line, font=POPPINS_BOLD, fill=WHITE)
        y += line_h
    
    # Divider (putus-putus)
    y += divider_h // 2
    for i in range(10):
        x_start = MARGIN_L + i * 30
        x_end = x_start + 14
        if x_end < MARGIN_L + MAX_W:
            draw.line([(x_start, y), (x_end, y)], fill=WHITE, width=2)
    
    y += divider_h // 2
    
    # Subtitle
    for line in sub_lines:
        bbox = draw.textbbox((0, 0), line, font=POPPINS_REG_32)
        draw.text((MARGIN_L, y), line, font=POPPINS_REG_32, fill=WHITE)
        y += sub_line_h
    
    draw_header_footer(draw, 1, 3)
    return img

def create_slide_2():
    """Slide 2: Perbandingan - Kolagen (Kiri) vs Glutathione (Kanan)"""
    img = load_and_prep_bg("pexels_raw.jpg")
    draw = ImageDraw.Draw(img)
    
    content_top = MARGIN_T + 40
    content_bottom = H - MARGIN_B - 40
    y = content_top
    
    # Title
    title = "Perbandingan Langsung"
    lines = wrap_text(draw, title, POPPINS_BOLD_85, MAX_W)
    for line in lines:
        bbox = draw.textbbox((0, 0), line, font=POPPINS_BOLD_85)
        draw.text((MARGIN_L, y), line, font=POPPINS_BOLD_85, fill=ORANGE)
        y += (bbox[3] - bbox[1]) + 15
    
    y += 20
    
    # Table-like comparison
    col_w = (MAX_W - 40) // 2
    left_x = MARGIN_L
    right_x = MARGIN_L + col_w + 40
    
    # Headers
    draw.text((left_x, y), "Kolagen", font=POPPINS_BOLD_44, fill=ORANGE)
    draw.text((right_x, y), "Glutathione", font=POPPINS_BOLD_44, fill=ORANGE)
    y += 60
    
    # Rows
    rows = [
        ("Target", "Anti-aging, elastisitas kulit", "Pencerah kulit, antioksidan"),
        ("Usia Target", "25–55 tahun", "20–45 tahun"),
        ("Hasil", "2–4 minggu", "4–8 minggu"),
        ("Popularitas", "Sangat tinggi", "Tinggi (tumbuh)"),
    ]
    
    for label, left_val, right_val in rows:
        # Label
        draw.text((left_x, y), label, font=POPPINS_SEMIBOLD_28, fill=WHITE)
        # Left value
        l_lines = wrap_text(draw, left_val, POPPINS_REG_32, col_w)
        ly = y
        for ll in l_lines:
            draw.text((left_x, ly), ll, font=POPPINS_REG_32, fill=WHITE)
            ly += 38
        # Right value
        r_lines = wrap_text(draw, right_val, POPPINS_REG_32, col_w)
        ry = y
        for rl in r_lines:
            draw.text((right_x, ry), rl, font=POPPINS_REG_32, fill=WHITE)
            ry += 38
        y = max(ly, ry) + 25
    
    draw_header_footer(draw, 2, 3)
    return img

def create_slide_3():
    """Slide 3: Tips pilih & bisa keduanya + CTA"""
    img = load_and_prep_bg("pexels_raw.jpg")
    draw = ImageDraw.Draw(img)
    
    content_top = MARGIN_T + 40
    content_bottom = H - MARGIN_B - 40
    y = content_top
    
    # Title
    title = "Kapan Memilih Masing‑Masing?"
    lines = wrap_text(draw, title, POPPINS_BOLD_85, MAX_W)
    for line in lines:
        bbox = draw.textbbox((0, 0), line, font=POPPINS_BOLD_85)
        draw.text((MARGIN_L, y), line, font=POPPINS_BOLD_85, fill=ORANGE)
        y += (bbox[3] - bbox[1]) + 15
    
    y += 20
    
    # Pilih Kolagen
    draw.text((MARGIN_L, y), "Pilih Kolagen jika:", font=POPPINS_SEMIBOLD_28, fill=ORANGE)
    y += 40
    kolagen_items = [
        "Target pasar wanita 30+ khawatir tanda penuaan",
        "Produk dengan permintaan pasar sudah terbukti",
        "Brand fokus anti-aging & kesehatan kulit"
    ]
    for i, item in enumerate(kolagen_items, 1):
        draw.text((MARGIN_L, y), f"{i}", font=POPPINS_BOLD_44, fill=ORANGE)
        i_lines = wrap_text(draw, item, POPPINS_REG_32, MAX_W - 60)
        iy = y
        for il in i_lines:
            draw.text((MARGIN_L + 60, iy), il, font=POPPINS_REG_32, fill=WHITE)
            iy += 38
        y = iy + 15
    
    y += 15
    
    # Pilih Glutathione
    draw.text((MARGIN_L, y), "Pilih Glutathione jika:", font=POPPINS_SEMIBOLD_28, fill=ORANGE)
    y += 40
    glut_items = [
        "Target pasar wanita 20–35 ingin kulit cerah & glowing",
        "Brand fokus skin brightening & perlindungan antioksidan",
        "Ingin produk dengan harga lebih terjangkau"
    ]
    for i, item in enumerate(glut_items, 1):
        draw.text((MARGIN_L, y), f"{i}", font=POPPINS_BOLD_44, fill=ORANGE)
        i_lines = wrap_text(draw, item, POPPINS_REG_32, MAX_W - 60)
        iy = y
        for il in i_lines:
            draw.text((MARGIN_L + 60, iy), il, font=POPPINS_REG_32, fill=WHITE)
            iy += 38
        y = iy + 15
    
    y += 20
    
    # Tips: Bisa Keduanya!
    draw.text((MARGIN_L, y), "💡 Tips: Bisa Keduanya!", font=POPPINS_BOLD_44, fill=ORANGE)
    y += 60
    tip_text = "Banyak brand sukses tawarkan keduanya: kolagen pagi (perbaikan), glutathione malam (detoks). Atau gabung dalam satu formula."
    tip_lines = wrap_text(draw, tip_text, POPPINS_REG_32, MAX_W)
    for tl in tip_lines:
        draw.text((MARGIN_L, y), tl, font=POPPINS_REG_32, fill=WHITE)
        y += 38
    
    y += 15
    # CTA
    cta = "Konsultasi gratis — chat kami sekarang!"
    draw.text((MARGIN_L, y), cta, font=POPPINS_BOLD_44, fill=ORANGE)
    
    draw_header_footer(draw, 3, 3)
    return img

def main():
    os.makedirs("output", exist_ok=True)
    
    print("🎨 Creating Yasma Natura carousel...")
    
    slides = [
        ("Slide 1 - Cover", create_slide_1),
        ("Slide 2 - Perbandingan", create_slide_2),
        ("Slide 3 - Pilih & CTA", create_slide_3),
    ]
    
    for name, fn in slides:
        img = fn()
        out_path = f"output/yasma_kolagen_vs_glutathione_{name.lower().replace(' ', '_').replace('-', '_')}.webp"
        img.save(out_path, "WEBP", quality=90, method=6)
        print(f"  ✅ {name} → {out_path}")
    
    print("\n🎉 Done! Files in output/")

if __name__ == "__main__":
    main()