#!/usr/bin/env python3
"""GEO Carousel StudioSoft 4:5 — GEN only, no schedule."""
from PIL import Image, ImageDraw, ImageFont
import os

OUT_DIR = "/home/mantapman/.hermes/profiles/atun/workspace/studiosoft_geo_45"
os.makedirs(OUT_DIR, exist_ok=True)

W, H = 1080, 1350
M = 65
MX = W - 2*M
BLUE = "#1E40AF"
WHITE = "#FFFFFF"
ACCENT = "#DBEAFE"
CARD = "#152D5A"

FD = "/home/mantapman/.fonts/poppins"

def ft(name, sz):
    return ImageFont.truetype(f"{FD}/Poppins-{name}.ttf", sz)

B130 = ft("Bold", 130); B100 = ft("Bold", 100); B80 = ft("Bold", 80)
B70 = ft("Bold", 70); B60 = ft("Bold", 60); B55 = ft("Bold", 55)
B50 = ft("Bold", 50); B45 = ft("Bold", 45); B24 = ft("Bold", 24)
SB45 = ft("SemiBold", 45); SB40 = ft("SemiBold", 40); SB36 = ft("SemiBold", 36)
R32 = ft("Regular", 32); R28 = ft("Regular", 28); R20 = ft("Regular", 20)

def wp(d, tx, fn, mw):
    ls = []
    for p in tx.split('\n'):
        if not p.strip(): ls.append(('', fn)); continue
        ws = p.split(); c = ""
        for w in ws:
            if d.textlength(c + w + " ", font=fn) <= mw: c += w + " "
            else:
                if c: ls.append((c.rstrip(), fn))
                c = w + " "
        if c.strip(): ls.append((c.rstrip(), fn))
    return ls

def hf(draw, num):
    draw.text((M, M), "StudioSoft", fill=ACCENT, font=B24)
    draw.text((W-M, M), f"{num}/5", fill=ACCENT, font=B24, anchor="ra")
    draw.text((M, H-55), "studiosoft.id", fill=ACCENT, font=R20)
    draw.text((W-M, H-55), "#GEO #StudioSoft", fill=ACCENT, font=R20, anchor="ra")

def line(draw, y):
    draw.rectangle([(M, y), (W-M, y+2)], fill=ACCENT)

# COVER
img = Image.new("RGB", (W, H), BLUE)
d = ImageDraw.Draw(img)
hf(d, 1)
d.text((M, 200), "GEO", fill=WHITE, font=B130)
d.text((M, 350), "Generative Engine", fill=ACCENT, font=SB45)
d.text((M, 410), "Optimization", fill=ACCENT, font=SB45)
line(d, 480)
d.text((M, 550), "Strategi Baru Biar Brandmu", fill=WHITE, font=B60)
d.text((M, 625), "Disebut di Jawaban AI", fill=WHITE, font=B60)
d.text((M, 760), "Bukan cuma SEO \u2014 optimasi untuk Google,", fill=ACCENT, font=R32)
d.text((M, 805), "ChatGPT, Gemini, Perplexity & AI lainnya", fill=ACCENT, font=R32)
img.save(f"{OUT_DIR}/01_cover.jpg", quality=85)
print("✅ 01_cover.jpg")

# SLIDE 2
img = Image.new("RGB", (W, H), BLUE)
d = ImageDraw.Draw(img)
hf(d, 2)
d.text((M, 120), "Apa Itu GEO?", fill=WHITE, font=B80)
line(d, 200)
y = 250
items = [
    ("01", "Optimasi untuk AI", "Strategi optimasi konten biar brand &\nwebsite muncul sebagai referensi di jawaban\nAI seperti ChatGPT, Gemini, Perplexity."),
    ("02", "Bukan SEO Biasa", "SEO fokus ranking di 10 link biru Google.\nGEO fokus bagaimana AI memahami, memilih,\ndan mengutip kontenmu."),
    ("03", "Kenapa Berbeda?", "AI nggak nampilin link \u2014 AI nyusun jawaban\ndari berbagai sumber biar kontenmu layak\njadi referensi."),
]
for num, title, desc in items:
    d.text((M, y), num, fill=WHITE, font=B55)
    d.text((M+65, y), title, fill=WHITE, font=SB45)
    y += 55
    lines = wp(d, desc, R32, MX-65)
    for lt, lf in lines:
        d.text((M+65, y), lt, fill=ACCENT, font=lf)
        y += lf.size + 4
    y += 25
img.save(f"{OUT_DIR}/02_slide.jpg", quality=85)
print("✅ 02_slide.jpg")

# SLIDE 3
img = Image.new("RGB", (W, H), BLUE)
d = ImageDraw.Draw(img)
hf(d, 3)
d.text((M, 120), "Kenapa GEO Penting?", fill=WHITE, font=B70)
line(d, 195)
d.text((M, 230), "Data yang Wajib Kamu Tahu", fill=ACCENT, font=SB40)
cw = (MX - 25) // 2
data = [
    ("73%", "search intent masih\ndi Google", "SparkToro"),
    ("27%", "tersebar di 40+\nplatform lain", "ChatGPT, YouTube,\nReddit, TikTok, dll"),
    ("800%", "kenaikan referral AI/\nLLM dalam 3 bulan", "Backlinko"),
    ("6,5x", "AI lebih sering mengutip\nbrand dari pihak ke-3", "Kevin Indig"),
]
for i, (num, label, src) in enumerate(data):
    col, row = i%2, i//2
    cx = M + col*(cw+25)
    cy = 300 + row*195
    d.rounded_rectangle([(cx, cy), (cx+cw, cy+175)], radius=10, fill=CARD)
    d.text((cx+15, cy+12), num, fill=WHITE, font=B70)
    lines = wp(d, label, R28, cw-30)
    ly = cy + 85
    for lt, lf in lines:
        d.text((cx+15, ly), lt, fill=ACCENT, font=lf)
        ly += lf.size + 3
    d.text((cx+15, cy+155), src, fill=ACCENT, font=R20)
line(d, 720)
d.text((M, 760), "Ini bukan tren \u2014 ini perubahan fundamental", fill=WHITE, font=B45)
d.text((M, 820), "cara orang mencari informasi.", fill=WHITE, font=B45)
img.save(f"{OUT_DIR}/03_slide.jpg", quality=85)
print("✅ 03_slide.jpg")

# SLIDE 4
img = Image.new("RGB", (W, H), BLUE)
d = ImageDraw.Draw(img)
hf(d, 4)
d.text((M, 120), "SEO vs GEO", fill=WHITE, font=B70)
line(d, 195)
d.text((M, 230), "Pahami Bedanya, Kuasai Dua-duanya", fill=ACCENT, font=SB40)
cw = (MX - 25) // 2
ch = 320
d.rounded_rectangle([(M, 290), (M+cw, 290+ch)], radius=12, fill=CARD)
d.text((M+20, 310), "SEO", fill=WHITE, font=B55)
iy = 385
for it in ["Keyword & Backlink", "Ranking Google SERP", "10 Link Biru Klasik", "Traffic dari Klik", "Algoritma Google"]:
    d.ellipse([(M+20, iy+5), (M+36, iy+21)], fill=ACCENT)
    d.text((M+48, iy), it, fill=ACCENT, font=R28)
    iy += 38
cx2 = M + cw + 25
d.rounded_rectangle([(cx2, 290), (cx2+cw, 290+ch)], radius=12, fill=CARD)
d.text((cx2+20, 310), "GEO", fill=WHITE, font=B55)
iy = 385
for it in ["Konten Informatif", "Disebut Jawaban AI", "Semua Platform", "Traffic dari AI Chat", "Relevansi & Otoritas"]:
    d.ellipse([(cx2+20, iy+5), (cx2+36, iy+21)], fill=ACCENT)
    d.text((cx2+48, iy), it, fill=ACCENT, font=R28)
    iy += 38
line(d, 660)
d.text((M, 700), "Keduanya saling melengkapi.", fill=WHITE, font=B50)
d.text((M, 760), "Jangan pilih salah satu \u2014 kuasai dua-duanya.", fill=ACCENT, font=SB40)
d.text((M, 870), "\u201cSEO dulu soal ranking. Sekarang soal", fill=ACCENT, font=R28)
d.text((M, 910), "relevance dan trust di tiap platform.\u201d", fill=ACCENT, font=R28)
d.text((M, 950), "\u2014 Neil Patel", fill=ACCENT, font=SB36)
img.save(f"{OUT_DIR}/04_slide.jpg", quality=85)
print("✅ 04_slide.jpg")

# SLIDE 5
img = Image.new("RGB", (W, H), BLUE)
d = ImageDraw.Draw(img)
hf(d, 5)
d.text((M, 120), "Siap Mulai GEO?", fill=WHITE, font=B70)
line(d, 195)
d.text((M, 230), "3 Langkah Awal", fill=ACCENT, font=SB40)
y = 300
for num, title, desc in [("01","Audit","Di mana audiensmu mencari informasi?"),("02","Optimasi","Website, GBP, sosmed, YouTube \u2014 rapikan semua."),("03","Otoritas","Guest post, ulasan, publikasi industri. AI suka ini.")]:
    d.rounded_rectangle([(M, y), (W-M, y+90)], radius=8, fill=CARD)
    d.text((M+20, y+12), num, fill=WHITE, font=B50)
    d.text((M+85, y+10), title, fill=WHITE, font=SB45)
    d.text((M+85, y+55), desc, fill=ACCENT, font=R28)
    y += 110
y += 5; line(d, y); y += 20
d.text((M, y), "Yang adaptasi sekarang,", fill=WHITE, font=B60)
d.text((M, y+70), "yang menang di 2027.", fill=WHITE, font=B60)
y_cta = H - 130
d.rounded_rectangle([(M, y_cta), (W-M, y_cta+55)], radius=10, fill=ACCENT)
d.text((W//2, y_cta+28), "Konsultasi GRATIS \u2192 0819-3500-0624", fill=BLUE, font=SB36, anchor="mm")
img.save(f"{OUT_DIR}/05_slide.jpg", quality=85)
print("✅ 05_slide.jpg")

print(f"\n✅ 5 slide di {OUT_DIR}")
