#!/usr/bin/env python3
"""StudioSoft Healthcare Carousel — hc32 "7 Aplikasi Mental Health Anak Usia 4-10 Tahun"
Cron run 8 Sep 2026 (19:00 UTC) -> hc32.
Resolusi: 1080x1350 (4:5 portrait)
BG: Teal #0F766E | Teks: Putih | Accent: Mint #5EEAD4 | Font: Poppins
5 slide: cover, kenapa, isi(4 apps), lanjutan(3 apps+tips), cta
Sumber: https://studiosoft.id/7-aplikasi-mental-health-anak-usia-4-10-tahun-yang-harus-dicoba-orang-tua/
Catatan: artikel healthcare DM-for-RS sudah HABIS dipakai hc01-hc31; artikel ini = artikel
healthcare studiosoft.id terakhir yg belum pernah jadi carousel seri hc.
"""
from PIL import Image, ImageDraw, ImageFont
import os

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

W, H = 1080, 1350
TEAL = (15, 118, 110)
MINT = (94, 234, 212)
WHITE = (255, 255, 255)
M = 65

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


def F(name, size):
    return ImageFont.truetype(os.path.join(FONT_DIR, name), size)


B130 = F("Poppins-Bold.ttf", 130)
B120 = F("Poppins-Bold.ttf", 120)
B110 = F("Poppins-Bold.ttf", 110)
B100 = F("Poppins-Bold.ttf", 100)
B90 = F("Poppins-Bold.ttf", 90)
B80 = F("Poppins-Bold.ttf", 80)
B70 = F("Poppins-Bold.ttf", 70)
B50 = F("Poppins-Bold.ttf", 50)
B40 = F("Poppins-Bold.ttf", 40)
B30 = F("Poppins-Bold.ttf", 30)
B28 = F("Poppins-Bold.ttf", 28)
SB36 = F("Poppins-SemiBold.ttf", 36)
SB32 = F("Poppins-SemiBold.ttf", 32)
SB28 = F("Poppins-SemiBold.ttf", 28)
REG36 = F("Poppins-Regular.ttf", 36)
REG32 = F("Poppins-Regular.ttf", 32)
REG30 = F("Poppins-Regular.ttf", 30)
REG28 = F("Poppins-Regular.ttf", 28)
REG26 = F("Poppins-Regular.ttf", 26)
REG24 = F("Poppins-Regular.ttf", 24)
REG20 = F("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):
    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):
    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 tick_deco(d, y):
    for i in range(6):
        dx = M + i * 30
        d.line([(dx, y), (dx + 18, y)], fill=MINT, width=3)


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

    d.text((M, 115), "7 APLIKASI", font=B100, fill=WHITE)
    d.text((M, 295), "MENTAL HEALTH", font=B70, fill=MINT)
    d.text((M, 425), "UNTUK ANAK", font=B90, fill=WHITE)

    tick_deco(d, 620)
    y = draw_wrapped(d, (M, 660), "Bantu si kecil usia 4-10 tahun memahami & mengelola emosi lewat teknologi yang tepat — dengan pendampingan orang tua.", REG32, WHITE, W - 2 * M)

    y = draw_wrapped(d, (M, 980), "Rekomendasi aplikasi dari artikel StudioSoft: dari mindfulness, meditasi, sampai yoga untuk anak.", SB32, WHITE, W - 2 * M)

    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), TEAL)
    d = ImageDraw.Draw(img)
    header_footer(d, "2", "#kesehatamental")

    d.text((M, 90), "KENAPA", font=B110, fill=WHITE)
    d.text((M, 240), "PENTING?", font=B90, fill=MINT)

    items = [
        "1. Usia 4-10 tahun adalah fase anak belajar mengenali & mengelola emosinya",
        "2. Layar & game bisa memicu cemas — teknologi yang TEPAT bisa jadi alat bantu",
        "3. Aplikasi mengajarkan mindfulness, napas & relaksasi lewat cara yang menyenangkan",
        "4. Peran orang tua tetap kunci: mendampingi, bukan menggantikan",
    ]
    y = 430
    for s in items:
        y = draw_wrapped(d, (M, y), s, SB32, WHITE, W - 2 * M - 20)
        y += 58

    y = draw_wrapped(d, (M, 1100), "Aplikasi mental health = alat bantu, bukan pengganti kasih sayang & perhatian keluarga.", REG28, 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), TEAL)
    d = ImageDraw.Draw(img)
    header_footer(d, "3", "#kesehatamental")

    d.text((M, 80), "4 APLIKASI", font=B90, fill=WHITE)
    d.text((M, 210), "PERTAMA", font=B90, fill=MINT)

    items = [
        ("1", "Worry Dolls", "boneka kekhawatiran: anak mencurahkan rasa cemas lewat cerita interaktif"),
        ("2", "Mindful Powers", "latihan mindfulness lewat permainan, belajar kelola stres"),
        ("3", "Calm Kids", "meditasi singkat & latihan pernapasan untuk usia dini"),
        ("4", "Smiling Mind", "program berbasis studi dari psikolog, sesi sesuai usia anak"),
    ]
    y = 360
    for num, name, desc in items:
        d.text((M, y), num, font=B50, fill=MINT)
        yy = draw_wrapped(d, (M + 85, y - 4), name, B40, WHITE, W - M - 85 - 30)
        yy = draw_wrapped(d, (M + 85, yy), desc, REG26, WHITE, W - M - 85 - 30)
        y = yy + 62

    draw_wrapped(d, (M, 1160), "Mulai dari satu aplikasi, amati respons anak, lalu sesuaikan.", REG26, WHITE, W - 2 * M)

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


def slide_lanjutan():
    img = Image.new("RGB", (W, H), TEAL)
    d = ImageDraw.Draw(img)
    header_footer(d, "4", "#kesehatamental")

    d.text((M, 80), "3 APLIKASI", font=B90, fill=WHITE)
    d.text((M, 210), "LAGINYA", font=B90, fill=MINT)

    items = [
        ("5", "Breathe, Think, Do with Sesame", "tokoh Sesame Street: hadapi masalah dgn berpikir positif & empati"),
        ("6", "Headspace for Kids", "meditasi berpemandu suara ramah + cerita bikin anak rileks"),
        ("7", "Super Stretch Yoga", "yoga & relaksasi: sadar tubuh, kurangi stres, sehat sejak dini"),
    ]
    y = 350
    for num, name, desc in items:
        d.text((M, y), num, font=B50, fill=MINT)
        yy = draw_wrapped(d, (M + 85, y - 4), name, B40, WHITE, W - M - 85 - 30)
        yy = draw_wrapped(d, (M + 85, yy), desc, REG26, WHITE, W - M - 85 - 30)
        y = yy + 68

    tick_deco(d, 940)
    y = draw_wrapped(d, (M, 990), "Tips orang tua: pilih sesuai usia, dampingi saat dipakai, dan ajak anak bicarakan perasaannya.", SB32, WHITE, W - 2 * M)

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


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

    d.text((M, 110), "DAMPINGI", font=B110, fill=WHITE)
    d.text((M, 265), "BUAH HATI", font=B90, fill=MINT)
    d.text((M, 420), "DI ERA DIGITAL", font=B80, fill=WHITE)

    draw_wrapped(d, (M, 680), "Pilih aplikasi sesuai usia, temani saat dipakai, dan jadikan momen untuk ngobrol tentang perasaan si kecil.", SB32, WHITE, W - 2 * M)

    d.text((M, 950), "7 aplikasi rekomendasi bisa dibaca lengkap di:", font=REG30, fill=WHITE)
    d.text((M, 1080), "www.studiosoft.id", font=REG36, fill=WHITE)
    d.text((M, 1185), "Edukasi kesehatan & teknologi untuk keluarga", font=REG26, 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 — hc32 Mental Health Anak")
    print("=" * 45)
    paths = [slide_cover(), slide_kenapa(), slide_isi(), slide_lanjutan(), slide_cta()]
    print(f"OK {len(paths)} slide generated in {OUT_DIR}")
    return paths


if __name__ == "__main__":
    generate_all()
