#!/usr/bin/env python3
"""StudioSoft Healthcare Carousel — hc27 9 Ide Konten Digital Marketing RS yang Edukatif & Etis
Resolusi: 1080x1350 (4:5 portrait)
BG: Biru royal #1E3A8A
Teks: Putih #FFFFFF
Accent: Cyan #22D3EE
Font: Poppins
Safe zone: 65px margin
Aturan: BG biru => font WAJIB PUTIH (FIXED)
5 slide: cover, kenapa, isi, langkah, cta
Sumber: https://studiosoft.id/9-contoh-konten-digital-marketing-rumah-sakit-yang-edukatif-dan-tetap-etis/
"""
from PIL import Image, ImageDraw, ImageFont
import os

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

W, H = 1080, 1350
BLUE = (30, 58, 138)       # #1E3A8A
CYAN = (34, 211, 238)      # #22D3EE accent
WHITE = (255, 255, 255)
M = 65                      # margin/safe zone

FONT_DIR = os.path.expanduser("~/.fonts")

B150 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 150)
B130 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 130)
B110 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 110)
B90 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 90)
B70 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 70)
B50 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 50)
B30 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 30)
SB36 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-SemiBold.ttf"), 36)
SB32 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-SemiBold.ttf"), 32)
SB28 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-SemiBold.ttf"), 28)
REG36 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 36)
REG32 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 32)
REG28 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 28)
REG26 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 26)
REG24 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 24)
REG20 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 20)


def fh(drw, text, font):
    b = drw.textbbox((0, 0), text, font=font)
    return b[3] - b[1]


def wrap(drw, text, font, max_w):
    """Wrap text ke beberapa baris berdasarkan lebar max_w px."""
    words = text.split()
    lines, cur = [], ""
    for w_ in words:
        trial = (cur + " " + w_).strip()
        if drw.textlength(trial, font=font) <= max_w:
            cur = trial
        else:
            if cur:
                lines.append(cur)
            cur = w_
    if cur:
        lines.append(cur)
    return lines


def draw_wrapped(drw, xy, text, font, fill, max_w, lh=None):
    """Draw text dengan wrap. Return y setelah baris terakhir."""
    x, y = xy
    lh = lh or int(fh(drw, "Ag", font) * 1.22)
    for ln in wrap(drw, text, font, max_w):
        drw.text((x, y), ln, font=font, fill=fill)
        y += lh
    return y


def header_footer(d, num, tag):
    d.text((M, 30), "STUDIOSOFT", font=B30, fill=WHITE)
    d.text((W - M, 30), f"{num}/5", font=REG24, fill=WHITE, anchor="rt")
    d.text((M, H - 50), "studiosoft.id", font=REG20, fill=WHITE)
    d.text((W - M, H - 50), tag, font=REG20, fill=WHITE, anchor="rt")


def slide_cover():
    img = Image.new("RGB", (W, H), BLUE)
    d = ImageDraw.Draw(img)
    header_footer(d, "1", "#KontenEtis")

    d.text((M, 150), "9 IDE", font=B130, fill=CYAN)
    d.text((M, 315), "KONTEN", font=B130, fill=WHITE)
    d.text((M, 480), "DIGITAL", font=B130, fill=WHITE)
    d.text((M, 660), "RS & KLINIK", font=B90, fill=CYAN)

    y = 905
    for i in range(6):
        dx = M + i * 30
        d.line([(dx, y), (dx + 18, y)], fill=CYAN, width=3)

    d.text((M, y + 35), "Edukatif, jujur, tetap etis —", font=REG32, fill=WHITE)
    d.text((M, y + 82), "membangun kepercayaan pasien", font=REG32, fill=WHITE)

    p = os.path.join(OUT_DIR, "01_cover.png")
    img.save(p, "PNG")
    print(f"OK {p}")
    return p


def slide_kenapa():
    img = Image.new("RGB", (W, H), BLUE)
    d = ImageDraw.Draw(img)
    header_footer(d, "2", "#KontenEtis")

    d.text((M, 100), "KENAPA", font=B110, fill=WHITE)
    d.text((M, 245), "HARUS ETIS?", font=B90, fill=CYAN)

    items = [
        "1. Menyangkut kesehatan & nyawa pasien",
        "2. Janji berlebihan justru merusak kepercayaan",
        "3. Edukasi jujur membuat RS terasa humanis",
        "4. Pasien kini cari info kesehatan di internet",
    ]
    y = 470
    for s in items:
        draw_wrapped(d, (M, y), s, SB36, WHITE, W - 2 * M - 20)
        y += 150

    draw_wrapped(d, (M, 1120), "Konten yang baik menolong pasien memahami kesehatannya — bukan sekadar menjual layanan",
                 REG26, WHITE, W - 2 * M)

    p = os.path.join(OUT_DIR, "02_kenapa.png")
    img.save(p, "PNG")
    print(f"OK {p}")
    return p


def slide_isi():
    img = Image.new("RGB", (W, H), BLUE)
    d = ImageDraw.Draw(img)
    header_footer(d, "3", "#KontenEtis")

    d.text((M, 85), "9 IDE KONTEN", font=B90, fill=WHITE)
    d.text((M, 215), "EDUKATIF & ETIS", font=B70, fill=CYAN)

    items_left = [
        "Edukasi gejala & pencegahan penyakit",
        "Konten \u201cTanya Dokter\u201d (Q&A)",
        "Tips gaya hidup sehat",
        "Edukasi prosedur medis",
        "Profil dokter yang humanis",
    ]
    items_right = [
        "Testimoni pasien dengan izin",
        "Kampanye & program sosial",
        "FAQ layanan rumah sakit",
        "Pengingat pemeriksaan berkala",
    ]

    y0 = 400
    row_h = 150
    for col_x, num_x, items, start_num in ((M, M, items_left, 1), (M + 555, M + 555, items_right, 6)):
        y = y0
        for i, t in enumerate(items, start_num):
            d.text((num_x, y), f"{i}", font=B50, fill=CYAN)
            draw_wrapped(d, (num_x + 75, y + 8), t, REG26, WHITE, 380)
            y += row_h

    p = os.path.join(OUT_DIR, "03_isi.png")
    img.save(p, "PNG")
    print(f"OK {p}")
    return p


def slide_langkah():
    img = Image.new("RGB", (W, H), BLUE)
    d = ImageDraw.Draw(img)
    header_footer(d, "4", "#KontenEtis")

    d.text((M, 100), "TIPS", font=B130, fill=WHITE)
    d.text((M, 265), "KONTEN ETIS", font=B90, fill=CYAN)

    items = [
        ("1", "Fokus edukasi: gejala, pencegahan, gaya hidup sehat."),
        ("2", "Pakai bahasa sederhana, tidak menakut-nakuti."),
        ("3", "Hindari klaim berlebihan: \u201cpasti sembuh\u201d, \u201c100% aman\u201d."),
        ("4", "Transparan, minta izin pasien, dan tunjukkan empati."),
    ]
    y = 490
    for num, text in items:
        d.text((M, y), num, font=B50, fill=WHITE)
        yy = draw_wrapped(d, (M + 75, y + 6), text, REG28, WHITE, W - M - 75 - 40)
        y = yy + 70

    d.text((M, 1195), "RS yang jujur & membantu selalu lebih dipercaya pasien",
           font=REG26, fill=WHITE)

    p = os.path.join(OUT_DIR, "04_langkah.png")
    img.save(p, "PNG")
    print(f"OK {p}")
    return p


def slide_cta():
    img = Image.new("RGB", (W, H), BLUE)
    d = ImageDraw.Draw(img)
    header_footer(d, "5", "#KontenEtis")

    d.text((M, 130), "EDUKASI", font=B130, fill=CYAN)
    d.text((M, 290), "MEMBANGUN", font=B110, fill=WHITE)
    d.text((M, 435), "KEPERCAYAAN", font=B90, fill=WHITE)

    d.text((M, 640), "Konten yang edukatif dan etis membuat pasien", font=SB32, fill=WHITE)
    d.text((M, 690), "percaya — dan kepercayaan membawa pasien datang", font=SB32, fill=WHITE)

    d.text((M, 830), "Butuh strategi konten digital RS/klinik Anda?", font=REG32, fill=WHITE)

    d.text((M, 930), "Konsultasi Gratis", font=B50, fill=WHITE)
    d.text((M, 1030), "www.studiosoft.id", font=REG36, fill=WHITE)

    p = os.path.join(OUT_DIR, "05_cta.png")
    img.save(p, "PNG")
    print(f"OK {p}")
    return p


def generate_all():
    print("StudioSoft Healthcare Carousel — 9 Ide Konten Digital Marketing RS yang Edukatif & Etis")
    print("=" * 45)
    paths = [slide_cover(), slide_kenapa(), slide_isi(), slide_langkah(), slide_cta()]
    print(f"OK {len(paths)} slide generated in {OUT_DIR}")
    return paths


if __name__ == "__main__":
    generate_all()
