#!/usr/bin/env python3
"""studiosoft_hc42_carousel_gen.py — StudioSoft Healthcare Carousel hc42.

Topik : "Panduan SEO untuk Klinik dan Rumah Sakit: Biar Mudah Ditemukan Pasien di Google"
Artikel: https://studiosoft.id/panduan-seo-klinik-rumah-sakit/

Konteks run 21 Sep 2026 (02:00 WIB / 20 Sep 19:00 UTC):
- Stok artikel healthcare BARU masih HABIS (WP REST 21 Sep: artikel terbaru
  `jasa-branding-surabaya-membangun-identitas-brand-kuat`, non-healthcare).
- Audit 2.834 jadwal Repliz (/tmp/repliz_all_20260921.json): artikel `panduan-seo-klinik-rumah-sakit`
  TIDAK PERNAH ada di Threads SS (0 jadwal) -> dipakai sebagai topik BARU (bukan re-air).
  (Sisa kandidat healthcare lain sudah tayang semua di Threads.)
- Nama file slide BARU `ss_hc42_seoklinik_*` (mitigasi error media-fetch Repliz).

Standar desain Bos 16 Sep 2026: engine ss_carousel_lib.py -> rata kiri, satu blok di
tengah vertikal, TANPA 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_hc42_carousel")
TAG = "#seoklinik"
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([("SEO: TANDA TANGAN", SKY), "DIGITAL RS ANDA"], after=50)
    s.lead("Pasien baru pindah rumah dan butuh dokter kulit terdekat. Ia buka Google, "
           "ketik klinik kulit Surabaya, lalu pilih satu dari 10 hasil pertama.", after=38)
    s.para("Siapa yang muncul di halaman pertama, dia yang dapat pasiennya.", size=30)
    return s.render("ss_hc42_seoklinik_01_cover.png", OUT_DIR)


def s2():
    s = mk(2)
    s.title([("KEYWORD", SKY), "KESEHATAN ITU KHAS"], after=46)
    s.bullets([
        ("Dokter spesialis jantung Surabaya", "mencari dokter tertentu"),
        ("Biaya operasi katarak", "mencari informasi harga"),
        ("Klinik gigi terdekat", "ingin datang hari ini"),
        ("Gejala diabetes gestasional", "baru cari edukasi"),
    ], gap=28, name_size=36, desc_size=28)
    s.para("Konten yang baik melayani semuanya, dari edukasi sampai booking.", size=30, after=0)
    return s.render("ss_hc42_seoklinik_02_keyword.png", OUT_DIR)


def s3():
    s = mk(3)
    s.title([("LOCAL SEO:", SKY), "MODAL UTAMA"], after=46)
    s.bullets([
        ("Google Business Profile", "isi lengkap: foto, jam operasional, layanan."),
        ("NAP konsisten", "nama, alamat, telepon sama di semua platform."),
        ("Review dikelola", "minta review pasien puas, tanggapi semuanya."),
        ("Local citation", "daftar di direktori kesehatan dan Google Maps."),
        ("Konten lokal", "sebut nama kota dan area layanan."),
    ], gap=26, name_size=36, desc_size=28)
    return s.render("ss_hc42_seoklinik_03_local.png", OUT_DIR)


def s4():
    s = mk(4)
    s.title([("FONDASI", SKY), "TEKNIS WEBSITE"], after=46)
    s.bullets([
        ("Kecepatan website", "halaman lambat ditinggalkan sebelum dibaca."),
        ("Struktur URL bersih", "memudahkan Google memahami halaman layanan."),
        ("Schema markup", "untuk dokter dan layanan yang ditawarkan."),
        ("Versi mobile nyaman", "mayoritas pasien membuka dari ponsel."),
    ], gap=28, name_size=36, desc_size=28)
    s.para("Tanpa fondasi ini, konten terbaik pun sulit naik.", size=30, after=0)
    return s.render("ss_hc42_seoklinik_04_teknis.png", OUT_DIR)


def s5():
    s = mk(5)
    s.title([("KONSISTEN,", SKY), "BUKAN SEKALI JADI"], after=48)
    s.lead("SEO bukan biaya sekali pakai. Ia bekerja 24 jam dan tidak menagih per klik "
           "\u2014 yang dibutuhkan konsistensi dan kesabaran.", after=38)
    s.para("Butuh partner SEO untuk RS atau klinik Anda?", size=30, after=10)
    s.h2("www.studiosoft.id", size=40)
    return s.render("ss_hc42_seoklinik_05_cta.png", OUT_DIR)


if __name__ == "__main__":
    print("StudioSoft Healthcare Carousel hc42 \u2014 Panduan SEO untuk Klinik & RS")
    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)
