#!/usr/bin/env python3
"""studiosoft_hc39_carousel_gen.py — StudioSoft Healthcare Carousel hc39.

Topik : "Iklan Facebook & Instagram untuk Rumah Sakit: Etis, Efektif & Sesuai Regulasi"
Artikel: https://studiosoft.id/iklan-facebook-rumah-sakit/

Konteks run 18 Sep 2026 (02:00 WIB / 17 Sep 19:00 UTC):
- Stok artikel healthcare BARU masih HABIS (WP REST 17 Sep: artikel terbaru 17 Sep
  = digital-marketing-agency-surabaya (non-healthcare)).
- Semua topik carousel healthcare lama SUDAH PERNAH tayang di Threads SS (hc01-hc38).
- Kandidat "belum pernah tayang" tersisa: artikel `iklan-facebook-rumah-sakit` dan
  `klinik-kecil-butuh-digital-marketing` — keduanya hanya pernah dibuatkan TEXT post
  oleh pipeline artikel-share pada 9 Sep yang GAGAL (`Param text must be at most 500
  characters long.`) dan tidak pernah diulang. Topik iklan FB/IG untuk RS BELUM PERNAH
  tayang sebagai carousel -> dipakai di sini.
- Nama file slide BARU (ss_hc39_iklanfb_*) mengikuti pola mitigasi hc37/hc38 yang terbukti
  menyembuhkan error intermiten Repliz "The media could not be fetched from this URI".

Standar desain Bos 16 Sep 2026: engine ss_carousel_lib.py -> rata kiri, satu blok di tengah
vertikal, TANPA garis separator, bullet dot, bg BIRU TUA #122B63, judul Poppins-Bold 85 /
body 36 / sub 30, auto-fit. Resolusi 1080x1350 (4:5).
"""
import os
import sys

from PIL import Image

sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
import ss_carousel_lib as L

OUT_DIR = os.path.expanduser("~/.hermes/profiles/atun/workspace/studiosoft_hc39_carousel")
TAG = "#iklanrs"
BG = (18, 43, 99)      # #122B63 — warna baku Bos (16 Sep 2026)
SKY = L.SKY


def mk(num, total=5):
    return L.Slide(num, total, TAG, bg=BG)


def s1():
    s = mk(1)
    s.title([("IKLAN FB & IG", SKY), "UNTUK RUMAH", "SAKIT & KLINIK"], after=56)
    s.lead("Iklan layanan kesehatan boleh dijalankan \u2014 asal tahu aturan mainnya: "
           "etika kedokteran plus kebijakan Meta.", after=44)
    s.para("Jangkauannya luar biasa, tapi salah sedikit bisa kena penolakan iklan "
           "atau merusak kepercayaan pasien.", size=30)
    return s.render("ss_hc39_iklanfb_01_cover.png", OUT_DIR)


def s2():
    s = mk(2)
    s.title([("YANG TIDAK", SKY), "BOLEH"], after=50)
    s.bullets([
        ("Klaim kesembuhan berlebihan",
         "Misal \u201csembuh total dalam 1 hari\u201d. Terdengar menjual, tapi melanggar etik."),
        ("Foto sebelum-sesudah sensasional",
         "Tanpa disclaimer, konten seperti ini rawan ditolak Meta sekaligus menuai kritik."),
        ("Testimoni tanpa izin pasien",
         "Wajib ada persetujuan dan disclaimer bahwa hasil tiap orang berbeda."),
        ("Promosi obat resep",
         "Obat keras tidak boleh diiklankan langsung ke konsumen."),
        ("Fear-based marketing",
         "Menakut-nakuti pasien justru menurunkan kepercayaan ke institusi."),
    ], gap=26, name_size=36, desc_size=28)
    return s.render("ss_hc39_iklanfb_02_tidakboleh.png", OUT_DIR)


def s3():
    s = mk(3)
    s.title([("YANG BOLEH", SKY), "& PALING", "BERHASIL"], after=50)
    s.bullets([
        ("Iklan edukasi",
         "Informatif, tidak bombastis, dan menjawab pertanyaan pasien."),
        ("Promosi layanan bernarasi netral",
         "Contoh: \u201cKami buka layanan konsultasi kulit setiap Sabtu\u201d."),
        ("Brand awareness institusi",
         "Membangun citra RS sebagai institusi terpercaya, bukan sekadar diskon."),
        ("Targeting demografis spesifik",
         "Menjangkau audiens yang tepat, bukan semua orang."),
        ("Retargeting",
         "Menyasar yang sudah membuka website tapi belum booking."),
    ], gap=26, name_size=36, desc_size=28)
    return s.render("ss_hc39_iklanfb_03_boleh.png", OUT_DIR)


def s4():
    s = mk(4)
    s.title([("STRATEGI", SKY), "TARGETING"], after=44)
    s.para("Kekuatan Facebook & Instagram Ads ada di ketepatan sasaran:", size=31, after=34)
    s.bullets([
        ("Layanan kandungan",
         "Wanita 24-40 tahun, menikah, radius 15 km dari RS"),
        ("Sunat metode modern",
         "Orang tua dengan anak usia 5-12 tahun"),
        ("Medical check-up",
         "Usia 35-60 tahun, interest kesehatan, jabatan profesional"),
        ("Layanan kulit",
         "Usia 18-35 tahun, interest skincare & kecantikan"),
    ], gap=28, name_size=36, desc_size=28)
    return s.render("ss_hc39_iklanfb_04_targeting.png", OUT_DIR)


def s5():
    s = mk(5)
    s.title([("BUDGET KECIL,", SKY), "HASIL TERUKUR"], after=52)
    s.lead("Tidak perlu langsung jutaan. Mulai Rp50.000-100.000 per hari untuk menguji "
           "kreatif mana yang paling efektif, lalu scale up yang sudah terbukti.", after=42)
    s.para("Dengan data analytics, setiap rupiah budget iklan bisa "
           "dipertanggungjawabkan hasilnya.", after=44)
    s.para("Butuh strategi iklan RS & klinik yang etis dan terukur?", size=30, after=10)
    s.h2("www.studiosoft.id", size=40)
    return s.render("ss_hc39_iklanfb_05_cta.png", OUT_DIR)


if __name__ == "__main__":
    print("StudioSoft Healthcare Carousel hc39 — Iklan FB & IG untuk Rumah Sakit")
    print("=" * 70)
    for fn in (s1, s2, s3, s4, s5):
        p = fn()
        print("OK %s %s %d bytes" % (p, Image.open(p).size, os.path.getsize(p)))
    print("OK 5 slide -> %s" % OUT_DIR)
