#!/usr/bin/env python3
"""GEO Carousel StudioSoft BG Biru — PURE & SIMPLE, sesuai referensi Bos.
- Background: #1E40AF, langsung teks aja
- NO cards, NO boxes, NO border, NO fancy elements
- Clean typography langsung di blue bg
- Format: 1080×1350 (4:5) atau 1080×1920 (9:16)?
- Bos pilih mana?
"""
from PIL import Image, ImageDraw, ImageFont
import base64, json, os, sys, urllib.request, urllib.error
from repliz_client import HEADERS, BASE_URL

# ── Pilih format ──
# Bos referensi di #7580 itu 1024×1280 = 4:5 → 1080×1350
# Tapi Threads suka 9:16 juga
# Pake 4:5 dulu sesuai referensi
RATIO = sys.argv[1] if len(sys.argv) > 1 else "45"
if RATIO == "916":
    W, H = 1080, 1920
    TAG = "916"
else:
    W, H = 1080, 1350
    TAG = "45"

OUT_DIR = f"/home/mantapman/.hermes/profiles/atun/workspace/studiosoft_geo_simple_{TAG}"
os.makedirs(OUT_DIR, exist_ok=True)

M = 65
MX = W - 2*M
BLUE = "#1E40AF"
WHITE = "#FFFFFF"
ACCENT = "#DBEAFE"

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

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

# Font sizes — persis kayak batch lama
if TAG == "916":
    SZ_TITLE = 140
    SZ_BODY = 38
    SZ_HEAD = 24
    SZ_FOOT = 22
    Y_TITLE = 280
else:
    SZ_TITLE = 130
    SZ_BODY = 32
    SZ_HEAD = 24
    SZ_FOOT = 20
    Y_TITLE = 200

F_TITLE  = ft("Bold", SZ_TITLE)
F_B70    = ft("Bold", 70)
F_B60    = ft("Bold", 60)
F_B50    = ft("Bold", 50)
F_B45    = ft("Bold", 45)
F_SB45   = ft("SemiBold", 45)
F_SB40   = ft("SemiBold", 40)
F_SB36   = ft("SemiBold", 36)
F_BODY   = ft("Regular", SZ_BODY)
F_R32    = ft("Regular", 32)
F_R28    = ft("Regular", 28)
F_R20    = ft("Regular", SZ_FOOT)
F_HEAD   = ft("Bold", SZ_HEAD)

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 draw_geo_slide(num, title, content_blocks, has_divider=True):
    """Generate slide with PURE typography — langsung di blue bg, no cards/boxes."""
    img = Image.new("RGB", (W, H), BLUE)
    d = ImageDraw.Draw(img)
    
    # Header
    d.text((M, M), "StudioSoft", fill=ACCENT, font=F_HEAD)
    d.text((W-M, M), f"{num}/5", fill=ACCENT, font=F_HEAD, anchor="ra")
    
    # Title
    d.text((M, Y_TITLE), title, fill=WHITE, font=F_B70 if len(title) > 20 else F_B70)
    
    # Optional divider
    if has_divider:
        y_line = Y_TITLE + 80
        d.rectangle([(M, y_line), (W-M, y_line+2)], fill=ACCENT)
    
    # Start position for content
    y = (Y_TITLE + 110) if has_divider else (Y_TITLE + 70)
    
    for block in content_blocks:
        if block['type'] == 'text':
            lines = wp(d, block['text'], block.get('font', F_BODY), MX)
            for lt, lf in lines:
                d.text((M, y), lt, fill=block.get('color', ACCENT), font=lf)
                y += lf.size + 6
        elif block['type'] == 'title':
            d.text((M, y), block['text'], fill=WHITE, font=block.get('font', F_B50))
            y += block.get('font', F_B50).size + 8
        elif block['type'] == 'spacer':
            y += block.get('h', 25)
        elif block['type'] == 'line':
            d.rectangle([(M, y), (W-M, y+2)], fill=ACCENT)
            y += 15
    
    # Footer
    d.text((M, H-55), "studiosoft.id", fill=ACCENT, font=F_R20)
    d.text((W-M, H-55), "#GEO #StudioSoft", fill=ACCENT, font=F_R20, anchor="ra")
    
    return img

# ════════════ BUILD SLIDES ════════════

# COVER
img = draw_geo_slide(1, "", [
    {'type': 'text', 'text': 'GEO', 'font': F_TITLE, 'color': WHITE},
    {'type': 'text', 'text': 'Generative Engine Optimization', 'font': F_SB45, 'color': ACCENT},
    {'type': 'spacer', 'h': 40},
    {'type': 'text', 'text': 'Strategi Baru Biar Brandmu', 'font': F_B60, 'color': WHITE},
    {'type': 'text', 'text': 'Disebut di Jawaban AI', 'font': F_B60, 'color': WHITE},
    {'type': 'spacer', 'h': 60},
    {'type': 'text', 'text': 'Bukan cuma SEO \u2014 optimasi untuk Google,\nChatGPT, Gemini, Perplexity & AI lainnya', 'font': F_BODY, 'color': ACCENT},
], has_divider=False)

# Tapi cover butuh style khusus — override
cover = Image.new("RGB", (W, H), BLUE)
d = ImageDraw.Draw(cover)
d.text((M, M), "StudioSoft", fill=ACCENT, font=F_HEAD)
d.text((W-M, M), "1/5", fill=ACCENT, font=F_HEAD, anchor="ra")

cy = Y_TITLE
d.text((M, cy), "GEO", fill=WHITE, font=F_TITLE)
cy += F_TITLE.size + 10
d.text((M, cy), "Generative Engine Optimization", fill=ACCENT, font=F_SB45)
cy += 55
d.rectangle([(M, cy), (W-M, cy+2)], fill=ACCENT)
cy += 55
d.text((M, cy), "Strategi Baru Biar Brandmu", fill=WHITE, font=F_B60)
cy += 68
d.text((M, cy), "Disebut di Jawaban AI", fill=WHITE, font=F_B60)
cy += 90
d.text((M, cy), "Bukan cuma SEO \u2014 optimasi untuk Google,", fill=ACCENT, font=F_BODY)
cy += F_BODY.size + 6
d.text((M, cy), "ChatGPT, Gemini, Perplexity & AI lainnya", fill=ACCENT, font=F_BODY)

d.text((M, H-55), "studiosoft.id", fill=ACCENT, font=F_R20)
d.text((W-M, H-55), "#GEO #SearchEverywhere", fill=ACCENT, font=F_R20, anchor="ra")
cover.save(f"{OUT_DIR}/01_cover.jpg", quality=88)
print("✅ 01_cover.jpg")

# SLIDE 2
s2 = Image.new("RGB", (W, H), BLUE)
d = ImageDraw.Draw(s2)
d.text((M, M), "StudioSoft", fill=ACCENT, font=F_HEAD)
d.text((W-M, M), "2/5", fill=ACCENT, font=F_HEAD, anchor="ra")
d.text((M, Y_TITLE), "Apa Itu GEO?", fill=WHITE, font=F_B70)
d.rectangle([(M, Y_TITLE+80), (W-M, Y_TITLE+82)], fill=ACCENT)
y = Y_TITLE + 120

items = [
    ("01", "Optimasi untuk AI", "Strategi optimasi konten biar brand & website muncul\nsebagai referensi di jawaban AI seperti ChatGPT,\nGemini, Perplexity, dan Google AI Overviews."),
    ("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 dari\nberbagai sumber biar kontenmu layak jadi referensi,\nbukan cuma ranking."),
]

for num, title, desc in items:
    d.text((M, y), num, fill=WHITE, font=F_B50)
    d.text((M+65, y), title, fill=WHITE, font=F_SB45)
    y += 55
    lines = wp(d, desc, F_BODY, MX-65)
    for lt, lf in lines:
        d.text((M+65, y), lt, fill=ACCENT, font=lf)
        y += lf.size + 6
    y += 30

d.text((M, H-55), "studiosoft.id", fill=ACCENT, font=F_R20)
d.text((W-M, H-55), "#GEO", fill=ACCENT, font=F_R20, anchor="ra")
s2.save(f"{OUT_DIR}/02_slide.jpg", quality=88)
print("✅ 02_slide.jpg")

# SLIDE 3
s3 = Image.new("RGB", (W, H), BLUE)
d = ImageDraw.Draw(s3)
d.text((M, M), "StudioSoft", fill=ACCENT, font=F_HEAD)
d.text((W-M, M), "3/5", fill=ACCENT, font=F_HEAD, anchor="ra")
d.text((M, Y_TITLE), "Kenapa GEO Penting?", fill=WHITE, font=F_B70)
d.rectangle([(M, Y_TITLE+80), (W-M, Y_TITLE+82)], fill=ACCENT)
d.text((M, Y_TITLE+120), "Data yang Wajib Kamu Tahu", fill=ACCENT, font=F_SB40)

# Simple data layout — langsung text, no cards
data = [
    ("73%", "search intent masih di Google (SparkToro, 2025)"),
    ("27%", "tersebar di 40+ platform lain: ChatGPT, YouTube,\n   Reddit, TikTok, Amazon, dll"),
    ("800%", "kenaikan referral dari AI/LLM dalam 3 bulan (Backlinko)"),
    ("6,5x", "AI lebih sering mengutip brand dari sumber\n   pihak ketiga (Kevin Indig)"),
]

y = Y_TITLE + 200
for num, desc in data:
    d.text((M, y), num, fill=WHITE, font=F_B70)
    y += 75
    lines = wp(d, desc, F_BODY, MX)
    for lt, lf in lines:
        d.text((M, y), lt, fill=ACCENT, font=lf)
        y += lf.size + 6
    y += 30

d.rectangle([(M, y), (W-M, y+2)], fill=ACCENT)
y += 25
d.text((M, y), "Ini bukan tren \u2014 ini perubahan fundamental", fill=WHITE, font=F_B50)
y += 58
d.text((M, y), "cara orang mencari informasi.", fill=WHITE, font=F_B50)

d.text((M, H-55), "studiosoft.id", fill=ACCENT, font=F_R20)
d.text((W-M, H-55), "#GEO #SEO", fill=ACCENT, font=F_R20, anchor="ra")
s3.save(f"{OUT_DIR}/03_slide.jpg", quality=88)
print("✅ 03_slide.jpg")

# SLIDE 4
s4 = Image.new("RGB", (W, H), BLUE)
d = ImageDraw.Draw(s4)
d.text((M, M), "StudioSoft", fill=ACCENT, font=F_HEAD)
d.text((W-M, M), "4/5", fill=ACCENT, font=F_HEAD, anchor="ra")
d.text((M, Y_TITLE), "SEO vs GEO", fill=WHITE, font=F_B70)
d.rectangle([(M, Y_TITLE+80), (W-M, Y_TITLE+82)], fill=ACCENT)
d.text((M, Y_TITLE+120), "Pahami Bedanya, Kuasai Dua-duanya", fill=ACCENT, font=F_SB40)

# Side by side — simple text
y = Y_TITLE + 200

# 2 columns
cw = (MX - 30) // 2

# Left — SEO
d.text((M, y), "SEO", fill=WHITE, font=F_B60)
y_seo = y + 70
for it in ["Keyword & Backlink", "Ranking Google SERP", "10 Link Biru Klasik", "Traffic dari Klik Organik", "Algoritma Google"]:
    d.text((M, y_seo), "\u2022 " + it, fill=ACCENT, font=F_BODY)
    y_seo += 38

# Right — GEO  
x2 = M + cw + 30
d.text((x2, y), "GEO", fill=WHITE, font=F_B60)
y_geo = y + 70
for it in ["Konten Informatif & Otoritas", "Disebut di Jawaban AI", "Semua Platform", "Traffic dari AI Chat", "Relevansi & Pemahaman"]:
    d.text((x2, y_geo), "\u2022 " + it, fill=ACCENT, font=F_BODY)
    y_geo += 38

y = max(y_seo, y_geo) + 40
d.rectangle([(M, y), (W-M, y+2)], fill=ACCENT)
y += 25
d.text((M, y), "Keduanya saling melengkapi.", fill=WHITE, font=F_B50)
y += 60
d.text((M, y), "Jangan pilih salah satu \u2014 kuasai dua-duanya.", fill=ACCENT, font=F_SB40)

y += 100
d.text((M, y), "\u201cSEO dulu soal ranking. Sekarang soal", fill=ACCENT, font=F_BODY)
y += F_BODY.size + 6
d.text((M, y), "relevance dan trust di tiap platform.\u201d", fill=ACCENT, font=F_BODY)
y += F_BODY.size + 6
d.text((M, y), "\u2014 Neil Patel", fill=ACCENT, font=F_SB36)

d.text((M, H-55), "studiosoft.id", fill=ACCENT, font=F_R20)
d.text((W-M, H-55), "#SEO #GEO", fill=ACCENT, font=F_R20, anchor="ra")
s4.save(f"{OUT_DIR}/04_slide.jpg", quality=88)
print("✅ 04_slide.jpg")

# SLIDE 5
s5 = Image.new("RGB", (W, H), BLUE)
d = ImageDraw.Draw(s5)
d.text((M, M), "StudioSoft", fill=ACCENT, font=F_HEAD)
d.text((W-M, M), "5/5", fill=ACCENT, font=F_HEAD, anchor="ra")
d.text((M, Y_TITLE), "Siap Mulai GEO?", fill=WHITE, font=F_B70)
d.rectangle([(M, Y_TITLE+80), (W-M, Y_TITLE+82)], fill=ACCENT)
d.text((M, Y_TITLE+120), "3 Langkah Awal", fill=ACCENT, font=F_SB40)

y = Y_TITLE + 200
steps = [
    ("1", "Audit", "Di mana audiensmu mencari informasi?\nGoogle? ChatGPT? YouTube? Reddit?"),
    ("2", "Optimasi", "Website, Google Business Profile, sosmed,\nYouTube \u2014 pastikan semuanya rapi dan konsisten."),
    ("3", "Otoritas", "Guest post, ulasan, publikasi industri.\nAI 6,5x lebih suka sumber pihak ketiga."),
]

for num, title, desc in steps:
    d.text((M, y), f"{num}. {title}", fill=WHITE, font=F_B50)
    y += 55
    lines = wp(d, desc, F_BODY, MX)
    for lt, lf in lines:
        d.text((M, y), lt, fill=ACCENT, font=lf)
        y += lf.size + 6
    y += 30

d.rectangle([(M, y), (W-M, y+2)], fill=ACCENT)
y += 25
d.text((M, y), "Yang adaptasi sekarang,", fill=WHITE, font=F_B60)
y += 68
d.text((M, y), "yang menang di 2027.", fill=WHITE, font=F_B60)

# CTA
y_cta = H - 120
d.rounded_rectangle([(M, y_cta), (W-M, y_cta+50)], radius=8, fill=ACCENT)
d.text((W//2, y_cta+25), "Konsultasi GRATIS \u2192 0819-3500-0624", fill=BLUE, font=F_SB36, anchor="mm")

d.text((M, H-55), "studiosoft.id", fill=ACCENT, font=F_R20)
d.text((W-M, H-55), "#StudioSoft #GEO", fill=ACCENT, font=F_R20, anchor="ra")
s5.save(f"{OUT_DIR}/05_slide.jpg", quality=88)
print("✅ 05_slide.jpg")

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