#!/usr/bin/env python3
"""
Publish 5 Artikel StudioSoft — Jasa Optimasi Masuk AI Overview Google Surabaya
Listikel format, SEO Playbook, AI image + Yoast hijau + AI Button
"""
import json, os, base64, urllib.request, time, re, io

# === CREDENTIALS ===
DOMAIN = "https://studiosoft.id"
WP_USER = "bambangbot"
WP_APP_PASS = "q26r RePo BVy6 pwU2 F3z7 ouyl"

AUTH = base64.b64encode(f"{WP_USER}:{WP_APP_PASS}".encode()).decode()
HEADERS = {
    "Authorization": f"Basic {AUTH}",
    "Content-Type": "application/json",
    "User-Agent": "AtunBot/1.0"
}

# === KATEGORI / TAG ID (pre-fetched) ===
CAT_SEO = 330       # SEO
TAG_AI_OVERVIEW = None  # akan dibuat
TAG_SEO_SURABAYA = None  # akan dibuat
TAG_GOOGLE_AI = None      # akan dibuat

# === ASSET DIR ===
ASSET_DIR = "/home/mantapman/.hermes/profiles/atun/workspace/artikel_ai_overview_images"
os.makedirs(ASSET_DIR, exist_ok=True)

# === WA BUTTON / AI CONSULT ===
WA_LINK = "https://wa.me/6281935000624?text=Saya%20ingin%20tahu%20lebih%20dalam%20mengenai%20Jasa%20Optimasi%20AI%20Overview%20Google%20Surabaya"
CTA_TEXT = "💰 Gratis Konsultasi — Hubungi Kami via WhatsApp"

# === AI IMAGE PROMPT TEXT (for reference/description) ===
AI_IMG_DESC = "Ilustrasi AI Overview Google dengan tampilan mobile, menampilkan ringkasan AI di atas hasil pencarian Google, bernuansa profesional, warna biru putih"

# === 5 ARTIKEL ===
ARTIKELS = [
    {
        "judul": "Apa Itu AI Overview Google dan Kenapa Bisnis di Surabaya Wajib Tahu?",
        "slug": "apa-itu-ai-overview-google-kenapa-bisnis-surabaya-wajib-tahu",
        "meta_desc": "Pelajari apa itu AI Overview Google, bagaimana fitur ini mengubah cara orang mencari di Google, dan kenapa bisnis di Surabaya harus optimasi konten agar masuk AI Overview.",
        "focus_keyword": "AI Overview Google Surabaya",
        "image_prompt": "Digital illustration showing Google search result with AI Overview box at top, modern smartphone screen, Surabaya skyline background, blue white color scheme, professional digital marketing style",
        "konten": [
            {
                "type": "paragraf",
                "teks": "Google terus berinovasi. Setelah bertahun-tahun menjadi mesin pencari nomor satu di dunia, Google kini menghadirkan fitur revolusioner bernama <strong>AI Overview</strong> (sebelumnya dikenal sebagai Google SGE — Search Generative Experience). Fitur ini mengubah cara Google menampilkan hasil pencarian — dari sekadar daftar link biru menjadi ringkasan berbasis AI yang langsung menjawab pertanyaan pengguna."
            },
            {
                "type": "paragraf",
                "teks": "Bagi bisnis di Surabaya, memahami AI Overview bukan lagi pilihan — ini adalah kebutuhan. Jika konten bisnis Anda tidak dioptimasi untuk muncul di AI Overview, maka Anda kehilangan kesempatan emas untuk tampil di posisi paling premium di halaman hasil pencarian Google."
            },
            {"type": "subjudul", "teks": "Apa Itu AI Overview Google?"},
            {
                "type": "paragraf",
                "teks": "AI Overview adalah fitur Google yang menggunakan <strong>kecerdasan buatan (AI) generatif</strong> untuk merangkum informasi dari berbagai sumber terpercaya dan menyajikannya dalam bentuk ringkasan singkat di bagian atas hasil pencarian. Fitur ini berbeda dengan cuplikan biasa (featured snippet) karena AI Overview mampu menggabungkan informasi dari banyak sumber dan menyajikannya dalam bahasa yang lebih natural."
            },
            {"type": "list_poin", "poin": [
                "Muncul di posisi paling atas halaman Google — di atas semua hasil organik dan iklan",
                "Berisi ringkasan berbasis AI yang langsung menjawab pertanyaan pengguna",
                "Mengutip dari 3-5 sumber terpercaya sekaligus dalam satu ringkasan",
                "Saat ini sudah aktif untuk pengguna di Indonesia, termasuk Surabaya",
                "Formatnya bisa berupa teks, poin-poin, atau tabel perbandingan"
            ]},
            {"type": "subjudul", "teks": "Kenapa Ini Penting untuk Bisnis di Surabaya?"},
            {
                "type": "paragraf",
                "teks": "Surabaya adalah kota bisnis terbesar kedua di Indonesia dengan pertumbuhan digital yang sangat pesat. Ratusan ribu pencarian dilakukan setiap hari oleh warga Surabaya — dari mencari \"katering kantor Surabaya\" hingga \"jasa website Surabaya\". Jika bisnis Anda muncul di AI Overview untuk kata kunci-kata kunci ini, Anda mendapatkan <strong>exposure luar biasa</strong> tanpa harus membayar iklan."
            },
            {"type": "list_poin", "poin": [
                "AI Overview menempati posisi paling terlihat — bahkan di atas hasil organik nomor 1",
                "Pengguna Google semakin sering melihat AI Overview dan menganggapnya sebagai jawaban kredibel",
                "Bisnis lokal di Surabaya yang belum optimasi AI Overview akan tertinggal dari kompetitor",
                "Trafik organik bisa turun drastis jika konten Anda tidak masuk AI Overview — karena pengguna sudah puas dengan ringkasan dari konten kompetitor"
            ]},
            {"type": "subjudul", "teks": "Bagaimana Cara Kerja AI Overview?"},
            {
                "type": "paragraf",
                "teks": "AI Overview bekerja dengan cara yang cukup berbeda dari algoritma Google tradisional. Alih-alih hanya mencari halaman dengan keyword paling cocok, AI Overview membaca dan memahami <strong>konteks dan maksud</strong> di balik pertanyaan pengguna. Sistem ini menganalisis struktur konten, otoritas domain, dan relevansi topik secara lebih mendalam."
            },
            {"type": "list_poin", "poin": [
                "Google AI menganalisis maksud pencarian (search intent) secara kontekstual",
                "Konten dengan struktur yang jelas (heading, list, FAQ) memiliki peluang lebih besar",
                "EEAT (Experience, Expertise, Authoritativeness, Trustworthiness) tetap menjadi faktor kunci",
                "Konten fresh dan orisinal lebih diutamakan daripada konten generik hasil rewrite",
                "Google mengutip sumber secara eksplisit — jadi link ke website Anda tetap tercantum"
            ]},
        ]
    },
    {
        "judul": "5 Keunggulan Optimasi AI Overview Google untuk Bisnis Lokal Surabaya",
        "slug": "5-keunggulan-optimasi-ai-overview-google-bisnis-lokal-surabaya",
        "meta_desc": "Temukan 5 keunggulan strategis optimasi konten agar masuk AI Overview Google untuk bisnis lokal di Surabaya. Tingkatkan visibilitas dan kepercayaan pelanggan secara organik.",
        "focus_keyword": "optimasi AI Overview Google Surabaya",
        "image_prompt": "Business infographic showing 5 advantages of AI Overview optimization, Surabaya landmark graphic, Google AI integration, modern flat design with blue gradient, business growth visualization",
        "konten": [
            {
                "type": "paragraf",
                "teks": "Optimasi untuk AI Overview Google memberikan keunggulan yang berbeda dengan SEO tradisional. Bagi bisnis lokal di Surabaya, berikut adalah <strong>5 keunggulan utama</strong> yang bisa Anda dapatkan dengan mengoptimasi konten agar masuk ke AI Overview Google."
            },
            {
                "type": "subjudul",
                "teks": "1. Posisi Paling Premium di Halaman Google"
            },
            {
                "type": "paragraf",
                "teks": "AI Overview muncul di posisi paling atas halaman hasil pencarian — bahkan di atas hasil organik nomor 1 dan iklan berbayar. Ini berarti konten Anda menjadi <strong>hal pertama yang dilihat</strong> pengguna Google saat mencari informasi terkait bisnis Anda. Untuk kata kunci lokal seperti \"jasa SEO Surabaya\" atau \"digital marketing Surabaya\", posisi ini sangat kompetitif dan bernilai tinggi."
            },
            {
                "type": "subjudul",
                "teks": "2. Meningkatkan Kredibilitas dan Kepercayaan"
            },
            {
                "type": "paragraf",
                "teks": "Ketika konten bisnis Anda dikutip oleh AI Overview, Google secara tidak langsung memberikan <strong>sertifikasi kredibilitas</strong>. Pengguna cenderung lebih percaya pada bisnis yang informasinya digunakan Google sebagai sumber jawaban. Ini membangun brand authority yang sulit didapatkan dengan cara lain."
            },
            {
                "type": "list_poin",
                "poin": [
                    "Google hanya mengutip sumber yang dianggap kredibel dan relevan",
                    "Muncul di AI Overview = mendapatkan endorsement implisit dari Google",
                    "Meningkatkan click-through rate karena branding perusahaan terlihat di ringkasan",
                    "Membangun kepercayaan sebelum pengguna mengklik link ke website Anda"
                ]
            },
            {
                "type": "subjudul",
                "teks": "3. Trafik Organik yang Lebih Stabil dan Tahan Lama"
            },
            {
                "type": "paragraf",
                "teks": "Berbeda dengan iklan berbayar yang berhenti saat budget habis, posisi di AI Overview bisa bertahan lebih lama. Konten yang sudah terindeks dan dianggap relevan oleh AI Google akan terus muncul <strong>tanpa biaya tambahan</strong>. Ini menjadikan optimasi AI Overview sebagai investasi jangka panjang yang sangat efisien."
            },
            {
                "type": "subjudul",
                "teks": "4. Keunggulan Kompetitif di Pasar Surabaya"
            },
            {
                "type": "paragraf",
                "teks": "Mayoritas bisnis di Surabaya belum menyadari pentingnya optimasi AI Overview. Ini artinya, <strong>early adopters</strong> yang mulai mengoptimasi konten mereka sekarang akan memiliki keunggulan kompetitif yang signifikan. Sementara kompetitor Anda masih fokus pada SEO tradisional, Anda sudah mendapatkan posisi premium di era pencarian AI."
            },
            {
                "type": "subjudul",
                "teks": "5. Data dan Insight Pelanggan yang Lebih Akurat"
            },
            {
                "type": "paragraf",
                "teks": "Optimasi AI Overview mengharuskan Anda memahami <strong>search intent</strong> audiens dengan lebih dalam. Proses ini menghasilkan data dan insight berharga tentang apa yang sebenarnya dicari calon pelanggan Anda di Surabaya. Data ini bisa digunakan untuk strategi marketing yang lebih tepat sasaran."
            },
        ]
    },
    {
        "judul": "7 Langkah Optimasi Konten agar Masuk AI Overview Google untuk Bisnis Surabaya",
        "slug": "7-langkah-optimasi-konten-masuk-ai-overview-google-surabaya",
        "meta_desc": "Panduan 7 langkah praktis optimasi konten agar muncul di AI Overview Google untuk bisnis di Surabaya. Cocok untuk UMKM dan perusahaan yang ingin meningkatkan visibilitas digital.",
        "focus_keyword": "cara optimasi konten AI Overview Google",
        "image_prompt": "Step-by-step infographic showing 7 steps for AI Overview optimization, Google search screen mockup, Surabaya city digital illustration, modern clean design blue and white",
        "konten": [
            {
                "type": "paragraf",
                "teks": "Optimasi agar konten masuk ke AI Overview Google membutuhkan strategi yang berbeda dengan SEO konvensional. Berikut adalah <strong>7 langkah praktis</strong> yang bisa Anda terapkan untuk bisnis di Surabaya."
            },
            {
                "type": "subjudul",
                "teks": "Langkah 1: Riset Keyword dengan Search Intent Mendalam"
            },
            {
                "type": "paragraf",
                "teks": "AI Overview sangat peka terhadap <strong>search intent</strong>. Google tidak hanya mencari keyword match, tapi memahami apakah konten Anda benar-benar menjawab pertanyaan pengguna. Gunakan tools seperti Google Keyword Planner, AnswerThePublic, atau Google People Also Ask untuk menemukan pertanyaan-pertanyaan spesifik yang sering diajukan calon pelanggan Anda di Surabaya."
            },
            {
                "type": "subjudul",
                "teks": "Langkah 2: Struktur Konten yang Jelas dan Terorganisir"
            },
            {
                "type": "paragraf",
                "teks": "Konten yang dioptimasi untuk AI Overview harus memiliki struktur yang sangat jelas. Gunakan heading (H2, H3) yang informatif, paragraf pendek yang langsung ke poin, dan elemen-elemen yang mudah dipindai oleh AI seperti <strong>bullet points, tabel, dan daftar bernomor</strong>. AI Overview menyukai konten yang terstruktur dengan baik karena lebih mudah dirangkum."
            },
            {
                "type": "subjudul",
                "teks": "Langkah 3: Optimasi EEAT (Experience, Expertise, Authoritativeness, Trustworthiness)"
            },
            {
                "type": "paragraf",
                "teks": "Google AI memprioritaskan konten dari sumber yang memiliki <strong>otoritas dan kredibilitas</strong>. Pastikan konten Anda mencantumkan author yang jelas, data yang bisa diverifikasi, referensi yang kredibel, dan pengalaman nyata. Untuk bisnis lokal Surabaya, cantumkan informasi spesifik seperti alamat, testimonials, dan studi kasus lokal."
            },
            {
                "type": "subjudul",
                "teks": "Langkah 4: Format FAQ dan Q&A"
            },
            {
                "type": "paragraf",
                "teks": "Konten dengan format FAQ (Frequently Asked Questions) memiliki peluang sangat besar untuk masuk AI Overview. Ini karena format tanya-jawab sangat cocok untuk dirangkum AI Google. Buatlah <strong>10-15 pertanyaan</strong> yang sering diajukan pelanggan tentang bisnis atau industri Anda, lalu jawab dengan singkat, padat, dan informatif."
            },
            {
                "type": "subjudul",
                "teks": "Langkah 5: Gunakan Data dan Statistik Terbaru"
            },
            {
                "type": "paragraf",
                "teks": "AI Overview cenderung memilih konten yang menyajikan <strong>data fresh dan spesifik</strong>. Sertakan statistik terkini, angka-angka konkret, dan data lokal Surabaya jika memungkinkan. Konten dengan data lebih dipercaya oleh AI Google dan lebih sering muncul di ringkasan."
            },
            {
                "type": "subjudul",
                "teks": "Langkah 6: Optimalisasi Kecepatan dan Mobile Experience"
            },
            {
                "type": "paragraf",
                "teks": "Meskipun AI Overview tidak secara langsung menilai kecepatan website, Google tetap mempertimbangkan <strong>user experience secara keseluruhan</strong>. Website yang lambat dan tidak mobile-friendly akan sulit bersaing. Pastikan website bisnis Anda dioptimasi untuk mobile, memiliki loading cepat, dan navigasi yang mudah."
            },
            {
                "type": "subjudul",
                "teks": "Langkah 7: Update dan Refresh Konten Secara Berkala"
            },
            {
                "type": "paragraf",
                "teks": "AI Google menyukai konten yang <strong>segar dan relevan</strong>. Jangan publish konten lalu dibiarkan begitu saja. Update secara berkala dengan informasi terbaru, tambahkan data baru, dan sesuaikan dengan tren terkini. Konten yang diupdate dalam 3-6 bulan terakhir memiliki peluang lebih besar untuk masuk AI Overview."
            },
        ]
    },
    {
        "judul": "Mengapa Jasa Optimasi AI Overview Google Itu Investasi Penting untuk Bisnis Surabaya di 2026",
        "slug": "mengapa-jasa-optimasi-ai-overview-google-investasi-bisnis-surabaya-2026",
        "meta_desc": "Kenapa jasa optimasi AI Overview Google jadi investasi krusial untuk bisnis di Surabaya tahun 2026. Pelajari dampak AI search terhadap strategi digital marketing bisnis Anda.",
        "focus_keyword": "jasa optimasi AI Overview Google Surabaya",
        "image_prompt": "Investment growth chart combined with Google AI Overview illustration, Surabaya Sura and Hibiscus monument background, modern business concept, blue gradient professional style",
        "konten": [
            {
                "type": "paragraf",
                "teks": "Tahun 2026 menjadi titik balik dalam sejarah SEO dan digital marketing. Google secara resmi mengintegrasikan AI Overview sebagai fitur standar — bukan lagi eksperimen. Bagi bisnis di Surabaya, ini adalah <strong>perubahan fundamental</strong> yang tidak bisa diabaikan. Jasa optimasi AI Overview Google bukan lagi kemewahan, melainkan kebutuhan strategis."
            },
            {
                "type": "subjudul",
                "teks": "Apa yang Berubah di Tahun 2026?"
            },
            {
                "type": "paragraf",
                "teks": "Beberapa perubahan besar dalam lanskap pencarian Google di 2026 yang berdampak langsung pada bisnis di Surabaya:"
            },
            {
                "type": "list_poin",
                "poin": [
                    "AI Overview menjadi default untuk sebagian besar pencarian — bukan lagi fitur opsional",
                    "Pengguna semakin jarang scroll ke bawah jika AI Overview sudah menjawab pertanyaan mereka",
                    "Trafik organik ke halaman hasil pencarian (SERP) konvensional mulai menurun",
                    "Persaingan untuk muncul di AI Overview semakin ketat seiring makin banyak bisnis yang sadar",
                    "Google terus menyempurnakan algoritma AI Overview — membuat optimasi semakin kompleks"
                ]
            },
            {
                "type": "subjudul",
                "teks": "Kenapa Jasa Optimasi Khusus AI Overview Diperlukan?"
            },
            {
                "type": "paragraf",
                "teks": "Optimasi untuk AI Overview berbeda dengan SEO tradisional. Dibutuhkan <strong>pendekatan khusus</strong> yang tidak bisa dilakukan dengan cara-cara lama. Jasa optimasi AI Overview menyediakan:"
            },
            {
                "type": "list_poin",
                "poin": [
                    "Audit konten khusus untuk AI-readiness — mengevaluasi apakah konten Anda siap dirangkum AI",
                    "Strategi konten berbasis search intent yang lebih mendalam dari SEO biasa",
                    "Optimasi struktur konten (heading, list, FAQ, tabel) yang ramah AI Overview",
                    "Riset query dan pertanyaan spesifik yang berpeluang tinggi masuk AI Overview",
                    "Monitoring posisi konten di AI Overview dan optimasi berkelanjutan"
                ]
            },
            {
                "type": "subjudul",
                "teks": "Risiko Jika Tidak Berinvestasi Sekarang"
            },
            {
                "type": "paragraf",
                "teks": "Setiap inovasi Google selalu menciptakan dualisme: <strong>peluang bagi yang cepat beradaptasi</strong>, dan <strong>ancaman bagi yang lambat</strong>. Jika bisnis Anda di Surabaya tidak mulai mengoptimasi konten untuk AI Overview sekarang, beberapa risiko berikut mengintai:"
            },
            {
                "type": "list_poin",
                "poin": [
                    "Kehilangan posisi hasil pencarian yang sudah susah payah dibangun selama ini",
                    "Trafik organik menurun drastis karena pengguna mendapatkan jawaban dari AI Overview kompetitor",
                    "Biaya akuisisi pelanggan (CAC) meningkat karena harus mengandalkan iklan berbayar",
                    "Kompetitor yang sudah optimasi AI Overview akan mendominasi pencarian di Surabaya",
                    "Brand visibility menurun karena konten Anda tidak lagi muncul di posisi premium"
                ]
            },
            {
                "type": "subjudul",
                "teks": "Investasi yang Sebanding dengan Hasil"
            },
            {
                "type": "paragraf",
                "teks": "Bisnis di Surabaya yang berinvestasi pada jasa optimasi AI Overview diprediksi akan <strong>menguasai pasar digital</strong> di kota ini. Dengan biaya yang relatif terjangkau dibandingkan iklan berbayar, optimasi AI Overview memberikan hasil jangka panjang yang lebih stabil dan cost-effective."
            },
        ]
    },
    {
        "judul": "Cara Memilih Jasa Optimasi AI Overview Google Surabaya yang Tepat",
        "slug": "cara-memilih-jasa-optimasi-ai-overview-google-surabaya-tepat",
        "meta_desc": "Panduan memilih jasa optimasi AI Overview Google di Surabaya. Ketahui kriteria penting, apa yang harus ditanyakan, dan bagaimana memastikan hasil optimal untuk bisnis Anda.",
        "focus_keyword": "jasa optimasi AI Overview Surabaya terpercaya",
        "image_prompt": "Professional consulting meeting illustration with Google AI Overview screen display, Surabaya urban background, checklist and comparison elements, blue modern business style",
        "konten": [
            {
                "type": "paragraf",
                "teks": "Semakin populernya AI Overview Google di tahun 2026, semakin banyak pula penyedia \"jasa optimasi AI Overview\" yang bermunculan. Namun, tidak semua jasa created equal. Berikut panduan memilih <strong>jasa optimasi AI Overview Google di Surabaya</strong> yang tepat dan terpercaya."
            },
            {
                "type": "subjudul",
                "teks": "1. Pahami Apa yang Sebenarnya Mereka Tawarkan"
            },
            {
                "type": "paragraf",
                "teks": "Jasa optimasi AI Overview yang bonafide harus mampu menunjukkan <strong>pemahaman mendalam</strong> tentang cara kerja AI Overview. Tanyakan hal-hal spesifik: bagaimana mereka melakukan riset query untuk AI Overview, bagaimana struktur konten yang dioptimasi, dan bagaimana mereka mengukur keberhasilan. Jika jawabannya masih general dan mirip dengan SEO biasa — waspada."
            },
            {
                "type": "subjudul",
                "teks": "2. Minta Bukti dan Studi Kasus"
            },
            {
                "type": "paragraf",
                "teks": "Jasa yang kredibel pasti memiliki <strong>studi kasus atau portfolio</strong> yang bisa ditunjukkan. Minta contoh konten yang berhasil masuk AI Overview, termasuk kata kunci apa yang digunakan dan berapa lama prosesnya. Untuk bisnis Surabaya, pastikan mereka punya pengalaman dengan klien lokal — karena optimasi lokal memiliki tantangan tersendiri."
            },
            {
                "type": "subjudul",
                "teks": "3. Evaluasi Pendekatan Konten Mereka"
            },
            {
                "type": "paragraf",
                "teks": "Optimasi AI Overview sangat bergantung pada <strong>kualitas konten</strong>. Jasa yang baik akan melakukan riset mendalam sebelum menulis, bukan asal generate artikel. Pastikan mereka memahami:"
            },
            {
                "type": "list_poin",
                "poin": [
                    "Riset search intent yang mendalam — bukan cuma keyword density",
                    "Struktur konten yang ramah AI (heading informatif, FAQ, list, tabel)",
                    "Optimasi EEAT — menampilkan expertise dan kredibilitas",
                    "Penggunaan data dan statistik terkini yang relevan",
                    "Strategi internal linking yang mendukung konteks topik"
                ]
            },
            {
                "type": "subjudul",
                "teks": "4. Perhatikan Transparansi Pelaporan"
            },
            {
                "type": "paragraf",
                "teks": "Jasa yang profesional harus memberikan <strong>laporan berkala</strong> yang jelas. Tanyakan metrik apa yang mereka laporkan dan seberapa sering. Laporan yang baik mencakup:"
            },
            {
                "type": "list_poin",
                "poin": [
                    "Daftar kata kunci yang berhasil masuk AI Overview",
                    "Perubahan posisi di hasil pencarian Google secara umum",
                    "Trafik organik dan engagement dari pengguna Surabaya",
                    "Rekomendasi optimasi berkelanjutan berdasarkan data"
                ]
            },
            {
                "type": "subjudul",
                "teks": "5. Pastikan Ada Pendekatan Kolaboratif"
            },
            {
                "type": "paragraf",
                "teks": "Optimasi AI Overview bukan proyek sekali jadi. Dibutuhkan <strong>kolaborasi berkelanjutan</strong> antara jasa optimasi dengan tim internal bisnis Anda. Pilih jasa yang bersedia bekerja sama erat, memberikan edukasi, dan melibatkan Anda dalam proses strategi."
            },
        ]
    },
]

def wp_api(endpoint, data=None, method="POST", content_type="application/json"):
    url = f"{DOMAIN}/wp-json/wp/v2/{endpoint}"
    body = json.dumps(data).encode() if data else None
    h = dict(HEADERS)
    req = urllib.request.Request(url, data=body, headers=h, method=method)
    try:
        with urllib.request.urlopen(req) as r:
            result = json.loads(r.read())
            print(f"  ✅ {endpoint}")
            return result
    except urllib.error.HTTPError as e:
        err = e.read().decode()[:300]
        print(f"  ❌ {endpoint}: HTTP {e.code} — {err}")
        return None

def create_tag(name):
    """Create a tag in WordPress"""
    return wp_api("tags", {"name": name, "slug": name.lower().replace(" ", "-")})

def ensure_tags():
    global TAG_AI_OVERVIEW, TAG_SEO_SURABAYA, TAG_GOOGLE_AI
    
    # Check existing
    existing = json.loads(urllib.request.urlopen(f"{DOMAIN}/wp-json/wp/v2/tags?per_page=100&orderby=name").read())
    tag_map = {t["name"].lower(): t["id"] for t in existing}
    
    needed_tags = {
        "AI Overview Google": None,
        "SEO Surabaya": None,
        "Google AI Search": None,
        "Optimasi AI": None,
        "SEO AI": None,
    }
    
    for name in needed_tags:
        slug = name.lower().replace(" ", "-").replace("--", "-")
        key = name.lower()
        if key in tag_map:
            needed_tags[name] = tag_map[key]
            print(f"  📌 Tag '{name}' exists (ID: {tag_map[key]})")
        else:
            result = create_tag(name)
            if result:
                needed_tags[name] = result["id"]
                print(f"  ✅ Tag '{name}' created (ID: {result['id']})")
            time.sleep(0.5)
    
    TAG_AI_OVERVIEW = needed_tags["AI Overview Google"]
    TAG_SEO_SURABAYA = needed_tags["SEO Surabaya"]
    TAG_GOOGLE_AI = needed_tags["Google AI Search"]
    TAG_OPTIMASI_AI = needed_tags["Optimasi AI"]
    TAG_SEO_AI = needed_tags["SEO AI"]
    
    return needed_tags

def generate_ai_image(artikel, index):
    """Generate AI image using a prompt — fallback to placeholder"""
    prompt = artikel["image_prompt"]
    fname = f"ai_overview_{index}_{artikel['slug'][:30]}.png"
    fpath = os.path.join(ASSET_DIR, fname)
    
    # Check if already exists
    if os.path.exists(fpath):
        print(f"  📸 Image exists: {fpath}")
        return upload_to_wp(fpath, artikel["slug"])
    
    print(f"  🖼️ Generating AI image for artikel #{index}...")
    
    try:
        # Use Replicate to generate
        import replicate
        os.environ["REPLICATE_API_TOKEN"] = "r8_b85QRATmTTiFW27eCQZOQyRN7kcYJpf3oeXSY"
        
        output = replicate.run(
            "black-forest-labs/flux-schnell",
            input={
                "prompt": prompt,
                "num_outputs": 1,
                "aspect_ratio": "1:1",
                "output_format": "webp",
                "num_inference_steps": 4,
            }
        )
        
        if output and len(output) > 0:
            img_url = str(output[0])
            print(f"  ✅ Image generated: {img_url}")
            
            # Download
            urllib.request.urlretrieve(img_url, fpath)
            print(f"  ✅ Downloaded: {fpath}")
        else:
            raise Exception("No output from Replicate")
            
    except Exception as e:
        print(f"  ⚠️ AI gen failed ({str(e)[:60]}), using fallback")
        # Create a simple placeholder image
        from PIL import Image, ImageDraw, ImageFont
        img = Image.new("RGB", (1024, 1024), (30, 64, 175))
        draw = ImageDraw.Draw(img)
        try:
            font = ImageFont.truetype(os.path.expanduser("~/.fonts/Poppins-Bold.ttf"), 48)
            font2 = ImageFont.truetype(os.path.expanduser("~/.fonts/Poppins-Regular.ttf"), 32)
        except:
            font = ImageFont.load_default()
            font2 = ImageFont.load_default()
        draw.text((512, 400), "AI Overview", font=font, fill=(255,255,255), anchor="mm")
        draw.text((512, 500), "Google Surabaya", font=font2, fill=(219, 234, 254), anchor="mm")
        draw.text((512, 580), f"Artikel #{index}", font=font2, fill=(219, 234, 254), anchor="mm")
        img.save(fpath)
        print(f"  ✅ Placeholder created: {fpath}")
    
    return upload_to_wp(fpath, artikel["slug"])


def upload_to_wp(fpath, slug):
    """FIXED 21/08: semua image → server OpenClaw (mantapserver), NO WP, NO base64."""
    from repliz_client import upload_image_to_server
    return upload_image_to_server(fpath, None)

def build_html_content(artikel):
    """Build full HTML content from structured konten"""
    parts = []
    
    for section in artikel["konten"]:
        if section["type"] == "paragraf":
            parts.append(f'<p>{section["teks"]}</p>')
        elif section["type"] == "subjudul":
            parts.append(f'<h2 class="wp-block-heading">{section["teks"]}</h2>')
        elif section["type"] == "list_poin":
            items = []
            for p in section["poin"]:
                items.append(f'<li>{p}</li>')
            parts.append('<ul>' + "".join(items) + '</ul>')
    
    # Add CTA + WA Button (avoid f-string brace issues)
    cta_html = '''
<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading {"textAlign":"center"} -->
<h2 class="wp-block-heading has-text-align-center">Siap Optimasi Konten untuk AI Overview Google?</h2>
<!-- /wp:heading -->

<!-- wp:paragraph {"align":"center"} -->
<p class="has-text-align-center">StudioSoft — Partner Pertumbuhan Bisnis Berbasis Data, siap membantu bisnis Anda di Surabaya untuk mengoptimasi konten agar masuk ke AI Overview Google. Dapatkan konsultasi gratis dan analisis awal tanpa biaya.</p>
<!-- /wp:paragraph -->

<!-- wp:buttons {"layout":{"type":"flex","justifyContent":"center"}} -->
<div class="wp-block-buttons">
<!-- wp:button {"backgroundColor":"#1E40AF","textColor":"white","className":"is-style-fill"} -->
<div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-white-color has-text-color has-background has-link-decoration wp-element-button" href="''' + WA_LINK + '''" style="background-color:#1E40AF;" target="_blank" rel="noreferrer noopener"><strong>💬 ''' + CTA_TEXT + '''</strong></a></div>
<!-- /wp:button -->
</div>
<!-- /wp:buttons -->

<!-- wp:paragraph {"align":"center"} -->
<p class="has-text-align-center">Atau kunjungi <strong><a href="https://studiosoft.id">studiosoft.id</a></strong> untuk informasi lebih lanjut</p>
<!-- /wp:paragraph -->
'''
    parts.append(cta_html)
    
    return "\n".join(parts)


def build_yoast_meta(artikel):
    """Build Yoast SEO meta data"""
    return {
        "yoast_head_json": {
            "title": f"{artikel['judul']} | StudioSoft Surabaya",
            "description": artikel["meta_desc"],
            "robots": {
                "index": "index",
                "follow": "follow",
                "max-snippet": "max-snippet:-1",
                "max-image-preview": "max-image-preview:large",
                "max-video-preview": "max-video-preview:-1"
            },
            "og_title": artikel["judul"],
            "og_description": artikel["meta_desc"],
            "og_type": "article",
            "og_locale": "id_ID",
            "og_site_name": "StudioSoft",
            "twitter_card": "summary_large_image",
            "twitter_title": artikel["judul"],
            "twitter_description": artikel["meta_desc"],
            "schema": {
                "@context": "https://schema.org",
                "@graph": [
                    {
                        "@type": "Article",
                        "headline": artikel["judul"],
                        "description": artikel["meta_desc"],
                        "author": {"@type": "Organization", "name": "StudioSoft"}
                    }
                ]
            }
        },
        "rank_math_description": artikel["meta_desc"],
        "rank_math_focus_keyword": artikel["focus_keyword"],
        "_yoast_wpseo_title": f"{artikel['judul']} | StudioSoft Surabaya",
        "_yoast_wpseo_metadesc": artikel["meta_desc"],
        "_yoast_wpseo_focuskw": artikel["focus_keyword"],
        "_yoast_wpseo_meta-robots-noindex": "0",
        "_yoast_wpseo_meta-robots-nofollow": "0",
        "_yoast_wpseo_opengraph-title": artikel["judul"],
        "_yoast_wpseo_opengraph-description": artikel["meta_desc"],
        "_yoast_wpseo_twitter-title": artikel["judul"],
        "_yoast_wpseo_twitter-description": artikel["meta_desc"],
    }


def publish_article(artikel, index, tags_dict):
    """Publish one article to WordPress"""
    print(f"\n{'='*60}")
    print(f"📝 ARTIKEL #{index}: {artikel['judul']}")
    print(f"{'='*60}")
    
    # 1. Generate/upload image
    print("\n1️⃣ Generating article image...")
    img_data = generate_ai_image(artikel, index)
    
    # 2. Build content
    print("\n2️⃣ Building HTML content...")
    content = build_html_content(artikel)
    
    # 3. Prepare post data
    tag_ids = [v for v in tags_dict.values() if v is not None]
    
    post_data = {
        "title": artikel["judul"],
        "slug": artikel["slug"],
        "content": content,
        "status": "publish",
        "categories": [CAT_SEO],
        "tags": tag_ids,
        "meta": {
            "_yoast_wpseo_title": f"{artikel['judul']} | StudioSoft Surabaya",
            "_yoast_wpseo_metadesc": artikel["meta_desc"],
            "_yoast_wpseo_focuskw": artikel["focus_keyword"],
            "_yoast_wpseo_meta-robots-noindex": "0",
            "_yoast_wpseo_meta-robots-nofollow": "0",
            "_yoast_wpseo_opengraph-title": artikel["judul"],
            "_yoast_wpseo_opengraph-description": artikel["meta_desc"],
            "_yoast_wpseo_twitter-title": artikel["judul"],
            "_yoast_wpseo_twitter-description": artikel["meta_desc"],
        }
    }
    
    # Add featured image if uploaded
    if img_data and img_data.get("id"):
        post_data["featured_media"] = img_data["id"]
    
    # 4. Publish
    print("\n3️⃣ Publishing to WordPress...")
    result = wp_api("posts", post_data)
    
    if result:
        print(f"\n✅ ✅ ✅ BERHASIL!")
        print(f"   Judul: {result['title']['rendered']}")
        print(f"   URL: {result['link']}")
        print(f"   Post ID: {result['id']}")
        return result
    else:
        print(f"\n❌ GAGAL publish artikel #{index}")
        return None


def main():
    print("🚀 STUDIOSOFT — AI OVERVIEW GOOGLE SURABAYA ARTICLES")
    print("="*60)
    
    # Step 1: Ensure tags
    print("\n📌 Step 1: Creating/Ensuring tags...")
    tags_dict = ensure_tags()
    
    # Step 2: Publish articles
    results = []
    for idx, artikel in enumerate(ARTIKELS, 1):
        result = publish_article(artikel, idx, tags_dict)
        if result:
            results.append(result)
        time.sleep(2)  # Rate limit
    
    # Step 3: Summary
    print(f"\n{'='*60}")
    print(f"📊 SUMMARY")
    print(f"{'='*60}")
    print(f"Total artikel: {len(ARTIKELS)}")
    print(f"Berhasil publish: {len(results)}")
    print(f"Gagal: {len(ARTIKELS) - len(results)}")
    
    if results:
        print(f"\n🌐 DAFTAR ARTIKEL:")
        for r in results:
            print(f"  • {r['title']['rendered']}")
            print(f"    → {r['link']}")


if __name__ == "__main__":
    main()
