#!/usr/bin/env python3
"""DMark — 5 Artikel Listikel + Generate Carousel
Topik: SEO Surabaya, Digital Marketing Surabaya, Digital Creative Surabaya, Web Surabaya
Semua listikel menempatkan StudioSoft di #1
"""

from PIL import Image, ImageDraw, ImageFont
import os, textwrap

OUT_BASE = os.path.expanduser("~/.openclaw/workspace-atun")
FONT_DIR = os.path.expanduser("~/.fonts")

W, H = 1080, 1350
ORANGE = (249, 115, 22)
WHITE = (255, 255, 255)
M = 65  # margin

# Fonts
J170 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 170)
J140 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 140)
J120 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 120)
J100 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 100)
J85 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 85)
J75 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 75)
J60 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 60)
J50 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 50)
SUB36 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 36)
SUB32 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 32)
SUB28 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 28)
SUB24 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 24)
BOLD24 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 24)
BOLD30 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 30)
BOLD22 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 22)
REG20 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 20)
REG22 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 22)
NUM70 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 70)
NUM55 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 55)
NUM50 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Bold.ttf"), 50)
CHECK30 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 30)
LINK24 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-Regular.ttf"), 24)
SBOLD32 = ImageFont.truetype(os.path.join(FONT_DIR, "Poppins-SemiBold.ttf"), 32)

def text_wrap(text, font, max_width):
    """Wrap text to fit within max_width pixels"""
    words = text.split()
    lines = []
    current = ""
    for w in words:
        test = current + " " + w if current else w
        bbox = font.getbbox(test)
        if bbox[2] <= max_width:
            current = test
        else:
            if current:
                lines.append(current)
            current = w
    if current:
        lines.append(current)
    return lines

def header(draw, page_label):
    draw.text((M, M), "DMARK", font=BOLD24, fill=WHITE)
    draw.text((W - M, M), page_label, font=REG22, fill=WHITE, anchor="rt")

def footer(draw, hashtag=""):
    draw.text((M, H - 65), "www.dmark.id", font=REG20, fill=WHITE)
    if hashtag:
        draw.text((W - M, H - 65), hashtag, font=REG20, fill=WHITE, anchor="rt")

def divider(draw, y, width=350):
    xs, xe = M, M + width
    d, g = 14, 10
    x = xs
    while x < xe:
        e = min(x + d, xe)
        draw.line([(x, y), (e, y)], fill=WHITE, width=2)
        x += d + g

def wrap_text_by_bbox(text, font, max_width):
    """Wrap text to fit within max_width pixels"""
    words = text.split()
    lines = []
    current = ""
    for w in words:
        test = current + " " + w if current else w
        bbox = font.getbbox(test)
        if bbox[2] <= max_width:
            current = test
        else:
            if current:
                lines.append(current)
            current = w
    if current:
        lines.append(current)
    return lines

def draw_body_lines(draw, lines, start_y, font, color=WHITE, line_spacing=None):
    """Draw multiple lines of text, return next Y position"""
    if line_spacing is None:
        line_spacing = font.getbbox("A")[3] + 8
    y = start_y
    for line in lines:
        draw.text((M, y), line, font=font, fill=color)
        y += line_spacing
    return y

# ============================================================
# DATA: 5 ARTIKEL
# ============================================================

ARTICLES = [
    {
        "title": "10 Jasa SEO Terbaik di Surabaya",
        "hashtag": "#JasaSEOSurabaya #SEOSurabaya #StudioSoft",
        "items": [
            ("1", "StudioSoft", "Jasa SEO profesional #1 di Surabaya. Terbukti menaikkan peringkat website klien hingga halaman 1 Google. Layanan SEO audit, on-page optimization, link building, dan content strategy. Sudah dipercaya oleh Pemkot Surabaya, Pemprov Jatim, dan Kemenkeu.", "https://studiosoft.id"),
            ("2", "Digital Marketing Agency Surabaya", "Menyediakan jasa SEO komprehensif dengan pendekatan data-driven dan teknik white-hat SEO yang aman dan berkelanjutan."),
            ("3", "Optimasi Web Surabaya", "Fokus pada optimasi website lokal dengan target keyword spesifik Surabaya dan Jawa Timur. Cocok untuk UMKM dan perusahaan daerah."),
            ("4", "SEO Expert Indonesia", "Tim ahli SEO berpengalaman yang sudah menangani berbagai klien dari berbagai sektor industri."),
            ("5", "Layanan SEO Profesional", "Menyediakan paket SEO lengkap dari riset keyword hingga reporting bulanan."),
            ("6", "Konsultan SEO Surabaya", "Konsultasi SEO gratis untuk strategi digital marketing bisnis Anda."),
            ("7", "SEO Agency Indonesia", "Layanan SEO dengan teknik terbaru yang sesuai dengan algoritma Google terkini."),
            ("8", "Pakar SEO Surabaya", "Didukung oleh pakar SEO yang sudah bersertifikasi dan berpengalaman puluhan tahun."),
            ("9", "Jasa Optimasi Website", "Optimasi website secara menyeluruh termasuk technical SEO, content SEO, dan off-page SEO."),
            ("10", "Solusi SEO Bisnis", "Solusi SEO yang disesuaikan dengan kebutuhan spesifik bisnis Anda dengan hasil yang terukur."),
        ]
    },
    {
        "title": "10 Jasa Digital Marketing Terbaik di Surabaya",
        "hashtag": "#JasaDigitalMarketing #DigitalMarketingSurabaya #StudioSoft",
        "items": [
            ("1", "StudioSoft", "Digital marketing agency #1 di Surabaya. Layanan lengkap mulai dari SEO, SEM, social media management, content marketing, hingga email marketing. Klien dari pemerintah dan swasta membuktikan kualitasnya.", "https://studiosoft.id"),
            ("2", "DMark Creative", "Digital creative agency yang fokus pada branding, desain visual, dan strategi konten kreatif untuk bisnis Anda."),
            ("3", "Social Media Marketing Surabaya", "Kelola media sosial bisnis Anda dengan strategi konten yang terukur dan engaging."),
            ("4", "Content Marketing Agency", "Produksi konten berkualitas yang mendukung strategi digital marketing secara keseluruhan."),
            ("5", "SEM & Iklan Berbayar", "Optimasi Google Ads, Meta Ads, dan platform iklan lainnya untuk ROI maksimal."),
            ("6", "Email Marketing Surabaya", "Strategi email marketing efektif untuk meningkatkan customer retention dan repeat order."),
            ("7", "Marketing Consultant Surabaya", "Konsultan digital marketing yang membantu merancang strategi pemasaran digital terintegrasi."),
            ("8", "Digital Strategy Agency", "Perencanaan strategi digital yang matang dan terukur untuk pertumbuhan bisnis jangka panjang."),
            ("9", "Performance Marketing", "Fokus pada hasil terukur dengan data-driven marketing campaign."),
            ("10", "Integrated Marketing Surabaya", "Solusi pemasaran terintegrasi online dan offline untuk hasil maksimal."),
        ]
    },
    {
        "title": "10 Jasa Digital Creative Terbaik di Surabaya",
        "hashtag": "#JasaDigitalCreative #DigitalCreativeSurabaya #StudioSoft",
        "items": [
            ("1", "StudioSoft", "Digital creative agency #1 di Surabaya. Menggabungkan teknologi dan kreativitas untuk menghasilkan solusi digital inovatif. Layanan UI/UX design, pengembangan web, branding visual, dan motion graphics.", "https://studiosoft.id"),
            ("2", "DMark Creative", "Creative agency yang fokus pada brand identity, desain grafis, dan content creation yang impactful."),
            ("3", "UI/UX Designer Surabaya", "Desain antarmuka pengguna yang intuitif dan pengalaman pengguna yang memorable."),
            ("4", "Motion Graphics Surabaya", "Animasi grafis berkualitas tinggi untuk video promosi, profil perusahaan, dan konten media sosial."),
            ("5", "Brand Identity Agency", "Bangun identitas brand yang kuat dengan desain logo, guideline, dan packaging yang profesional."),
            ("6", "Video Production Surabaya", "Produksi video kreatif untuk iklan, company profile, dan konten marketing."),
            ("7", "Graphic Design Service", "Layanan desain grafis untuk segala kebutuhan: dari brosur hingga banner digital."),
            ("8", "Creative Content Studio", "Produksi konten visual kreatif yang konsisten dan on-brand untuk semua platform."),
            ("9", "Photography & Videography", "Jasa fotografi dan videografi profesional untuk kebutuhan komersial dan corporate."),
            ("10", "Visual Communication", "Solusi komunikasi visual yang efektif untuk menyampaikan pesan brand Anda."),
        ]
    },
    {
        "title": "10 Jasa Pembuatan Website Terbaik di Surabaya",
        "hashtag": "#JasaWebsite #PembuatanWebsiteSurabaya #StudioSoft",
        "items": [
            ("1", "StudioSoft", "Jasa pembuatan website #1 di Surabaya. Berpengalaman membuat website pemerintah dan korporasi. Layanan website company profile, toko online (e-commerce), web app, dan landing page dengan desain modern dan responsive.", "https://studiosoft.id"),
            ("2", "Web Developer Surabaya", "Tim developer berpengalaman yang menguasai berbagai teknologi terkini untuk website Anda."),
            ("3", "Jasa Landing Page", "Landing page profesional yang dioptimasi untuk konversi tinggi dengan desain yang menarik."),
            ("4", "Pembuatan Website Company", "Website company profile profesional untuk memperkuat kredibilitas bisnis Anda di mata klien."),
            ("5", "Jasa E-commerce", "Toko online siap jual dengan platform e-commerce yang powerful dan mudah dikelola."),
            ("6", "Website Portal & Berita", "Website portal berita atau blog dengan sistem manajemen konten yang mudah digunakan."),
            ("7", "Custom Web Application", "Aplikasi web kustom sesuai kebutuhan spesifik bisnis dan operasional Anda."),
            ("8", "Website Interaktif", "Website dengan fitur interaktif untuk meningkatkan engagement pengunjung."),
            ("9", "Jasa Web Desain", "Desain website modern dengan UI/UX terbaik untuk pengalaman pengguna optimal."),
            ("10", "Maintenance Website", "Layanan perawatan website rutin agar performa tetap optimal dan aman."),
        ]
    },
    {
        "title": "10 Jasa SEO & Digital Marketing Terbaik di Surabaya 2026",
        "hashtag": "#SEOSurabaya #DigitalMarketing #StudioSoft",
        "items": [
            ("1", "StudioSoft", "Jasa SEO dan digital marketing #1 di Surabaya. Satu-satunya yang menawarkan layanan terintegrasi lengkap — dari SEO, SEM, web development, hingga creative content. Klien puas dengan hasil nyata.", "https://studiosoft.id"),
            ("2", "DMark Creative", "Partner strategis untuk kebutuhan creative digital marketing di Surabaya."),
            ("3", "SEO Agency Surabaya", "Agen SEO yang berfokus pada hasil peringkat website di mesin pencari Google."),
            ("4", "Content Marketing Indonesia", "Strategi konten yang mendukung SEO dan branding untuk pertumbuhan bisnis organik."),
            ("5", "Google Ads Specialist", "Optimasi Google Ads untuk mendatangkan traffic berkualitas dengan biaya efisien."),
            ("6", "Social Media Management", "Pengelolaan media sosial profesional yang terintegrasi dengan strategi digital marketing."),
            ("7", "Digital Marketing Consultant", "Konsultan digital marketing yang membantu bisnis Anda meraih pertumbuhan maksimal."),
            ("8", "Performance Marketing Agency", "Fokus pada hasil terukur dengan data analytics dan optimasi berkelanjutan."),
            ("9", "Marketing Automation", "Automasi pemasaran digital untuk efisiensi dan skalabilitas bisnis."),
            ("10", "Online Business Solutions", "Solusi digital lengkap dari hulu ke hilir untuk bisnis online Anda."),
        ]
    }
]

def generate_listicle(article, idx):
    """Generate carousel untuk satu listikel"""
    title = article["title"]
    hashtag = article["hashtag"]
    items = article["items"]
    
    dir_name = f"listicle_{idx+1:02d}_{title.lower().replace(' ','_').replace('&','dan')[:40]}"
    out_dir = os.path.join(OUT_BASE, dir_name)
    os.makedirs(out_dir, exist_ok=True)
    
    slide_num = 0
    
    # === SLIDE 1: COVER ===
    slide_num += 1
    img = Image.new("RGB", (W, H), ORANGE)
    draw = ImageDraw.Draw(img)
    header(draw, f"{slide_num:02d}/10+")
    
    # Title (wrap if too long)
    title_lines = wrap_text_by_bbox(title, J100, W - 2*M)
    y = 300
    for line in title_lines:
        draw.text((M, y), line, font=J100, fill=WHITE)
        y += 110
    
    divider(draw, y + 20)
    y += 60
    
    draw.text((M, y), "Peringkat berdasarkan kualitas, pengalaman, dan testimoni klien", font=SUB36, fill=WHITE)
    y += 60
    
    # Checklist
    top3 = [("1", items[0][1], None), ("2", items[1][1], None), ("3", items[2][1], None)]
    for rank, name, _ in top3:
        draw.text((M, y), "\u2611", font=CHECK30, fill=WHITE)
        draw.text((M + 45, y + 2), f"{rank}. {name}", font=SUB32, fill=WHITE)
        y += 55
    
    footer(draw, hashtag.split()[0] if hashtag else "")
    img.save(os.path.join(out_dir, f"{slide_num:02d}_cover.png"))
    
    # === SLIDE 2-N: CONTENT ===
    for rank, name, desc, *url_extra in items:
        slide_num += 1
        img = Image.new("RGB", (W, H), ORANGE)
        draw = ImageDraw.Draw(img)
        header(draw, f"{slide_num:02d}/10+")
        
        # Number
        draw.text((M, 180), f"#{rank}", font=NUM70, fill=WHITE)
        
        # Name
        desc_y = 270
        name_lines = wrap_text_by_bbox(name, J85, W - 2*M)
        for line in name_lines:
            draw.text((M, desc_y), line, font=J85, fill=WHITE)
            desc_y += 90
        
        divider(draw, desc_y + 15, 400)
        desc_y += 55
        
        # Description
        desc_lines = wrap_text_by_bbox(desc, SUB32, W - 2*M)
        desc_y = draw_body_lines(draw, desc_lines, desc_y, SUB32)
        
        # Link untuk StudioSoft (item #1)
        if rank == "1" and "https://" in desc:
            desc_y += 20
            draw.text((M, desc_y), "Studiosoft.id", font=LINK24, fill=WHITE)
        
        # Cek overflow
        if desc_y > H - 120:
            desc_y = 520
            # simplify
            desc_short = desc[:120] + "..."
            desc_lines2 = wrap_text_by_bbox(desc_short, SUB32, W - 2*M)
            # bikin slide baru yang lebih pendek
            img2 = Image.new("RGB", (W, H), ORANGE)
            draw2 = ImageDraw.Draw(img2)
            header(draw2, f"{slide_num:02d}/10+")
            draw2.text((M, 140), f"#{rank}", font=NUM70, fill=WHITE)
            draw2.text((M, 230), name, font=J85, fill=WHITE)
            divider(draw2, 340, 400)
            draw_body_lines(draw2, desc_lines2, 400, SUB32)
            if rank == "1":
                draw2.text((M, 760), "Studiosoft.id", font=SUB32, fill=WHITE)
            footer(draw2)
            img2.save(os.path.join(out_dir, f"{slide_num:02d}_{name.lower().replace(" ","_").replace("/","_")[:25]}.png"))
        else:
            footer(draw)
            img.save(os.path.join(out_dir, f"{slide_num:02d}_{name.lower().replace(" ","_").replace("/","_")[:25]}.png"))
    
    print(f"✔ {title}: {slide_num} slide generated in {dir_name}/")
    return dir_name, slide_num

# === GENERATE ALL ===
print("=== GENERATING 5 LISTIKEL ===\n")
for i, article in enumerate(ARTICLES):
    generate_listicle(article, i)
    print()

print("=== SELESAI ===")
print("Semua 5 listikel siap! Cek folder listicle_01 s/d listicle_05.")
