#!/usr/bin/env python3
"""Post 3 detail articles for StudioSoft: FB, Threads, LinkedIn - all type album with AI Overview carousel."""
import base64, json, os, sys, urllib.request, urllib.error

from repliz_client import HEADERS, BASE_URL as BASE

CAR_DIR = "/home/mantapman/.hermes/profiles/atun/workspace/ai_overview_carousel"
FILES = ["01_cover.png","02_ai_overviews.png","03_seo_vs_geo.png","04_search_everywhere.png","05_langkah.png"]

# Build medias
medias = []
for fname in FILES:
    fpath = os.path.join(CAR_DIR, fname)
    img_url = upload_image_to_server(fpath)
    # FIX 21/08: no base64 — image via server OpenClaw
    medias.append({
        "url": img_url,
        "type": "image",
        "alt": fname.replace(".png","").replace("_"," "),
    })

def api_call(method, endpoint, data=None):
    url = f"{BASE_URL}{endpoint}"
    body = json.dumps(data).encode() if data else None
    req = urllib.request.Request(url, data=body, headers=HEADERS, method=method)
    try:
        with urllib.request.urlopen(req) as resp:
            raw = resp.read()
            if resp.status == 204:
                return {"success": True}
            return json.loads(raw) if raw else {"success": True}
    except urllib.error.HTTPError as e:
        body = e.read().decode()
        return {"error": e.code, "body": json.loads(body) if body.startswith('{') else body[:500]}

def make_payload(account_id, caption, replies, link="", meta_title="", meta_desc="", slot=""):
    return {
        "title": "",
        "description": caption,
        "topic": "AI Overview, GEO, SEO, Search Everywhere Optimization",
        "type": "album",
        "medias": medias,
        "meta": {
            "title": meta_title,
            "description": meta_desc,
            "url": link,
        },
        "additionalInfo": {
            "isAiGenerated": False, "isDraft": False,
            "collaborators": [], "mentions": [],
            "music": {"id": "", "artist": "", "name": "", "thumbnail": ""},
            "products": [], "tags": [],
        },
        "replies": [{"text": r, "username": ""} for r in replies],
        "accountId": account_id,
        "scheduleAt": slot,
    }

# ── Account IDs ──
ACCOUNT_FB = "6a334952c5ff4ce3a3225941"        # FB StudioSoft
ACCOUNT_THREADS = "6a335b9ec5ff4ce3a3225c2a"   # Threads StudioSoft
ACCOUNT_LINKEDIN = "6a334c49c5ff4ce3a32259c9"   # LinkedIn StudioSoft

# ── Slots ──
# 14:00 WIB = 07:00 UTC (Threads)
# 17:00 WIB = 10:00 UTC (LinkedIn)
# 20:00 WIB = 13:00 UTC (FB)
SLOT_THREADS = "2026-07-25T07:00:00.000Z"
SLOT_LINKEDIN = "2026-07-25T10:00:00.000Z"
SLOT_FB = "2026-07-25T13:00:00.000Z"

ARTICLE_URL = "https://studiosoft.id/6-tren-seo-2026-yang-wajib-dikuasai-pebisnis-malang/"
ARTICLE_TITLE = "6 Tren SEO 2026 yang Wajib Dikuasai Pebisnis"

# ═══════════════════════════════════════════════════════════
# 1. THREADS StudioSoft — Kasual, padat, 500 char limit
# ═══════════════════════════════════════════════════════════

threads_caption = (
    "Google AI Overviews sekarang mendominasi 40% pencarian. "
    "Artikel baru StudioSoft bongkar 6 tren SEO 2026 — dari "
    "AI-Driven SEO sampai Zero-Click Search.\n\n"
    "Poin pentingnya:\n"
    "- AI Overviews bukan ancaman, tapi peluang kalau konten "
    "kamu terstruktur dan informatif\n"
    "- Voice Search naik 60% — optimasi ke keyword conversational\n"
    "- E-E-A-T makin ketat — bikin konten dengan bukti lokal\n"
    "- Video SEO dominan — YouTube & Shorts jadi mesin pencari\n"
    "- Core Web Vitals wajib 90+\n"
    "- SGE bikin 50% hasil zero-click\n\n"
    "Link artikel lengkap di bawah 👇"
)

threads_replies = [
    "Yang paling menarik: AI-Driven SEO. Google pake AI Overview "
    "di 40% pencarian. Tapi bukan akhir SEO — justru kesempatan "
    "buat yang bikin konten berkualitas dan terstruktur.\n\n"
    "Tips: pakai FAQ schema, target featured snippet, dan pastikan "
    "paragraf pertama langsung jawab pertanyaan user.\n\n"
    "studiosoft.id",

    "Tren yang paling diremehin? Voice Search. 60% pencarian lokal "
    "via suara. Orang Malang nanya \"di mana bengkel mobil "
    "terdekat?\" bukan \"bengkel mobil Malang\".\n\n"
    "Optimasi ke long-tail keyword + schema markup. Simple tp "
    "efektif banget.",
]

# ═══════════════════════════════════════════════════════════
# 2. LINKEDIN StudioSoft — Profesional, data-driven
# ═══════════════════════════════════════════════════════════

linkedin_caption = (
    "6 Tren SEO 2026 yang Wajib Dikuasai Pebisnis\n\n"
    "SEO tidak lagi sekadar riset keyword dan backlink. Tahun 2026 "
    "menjadi titik balik dengan integrasi AI yang masif ke dalam "
    "algoritma Google.\n\n"
    "Berikut breakdown 6 tren utama berdasarkan riset terbaru:\n\n"
    "1. AI-Driven SEO — Google AI Overviews muncul di 40% pencarian. "
    "Strategi: optimasi konten agar menjadi sumber yang dikutip AI, "
    "bukan sekadar ranking di hasil pencarian.\n\n"
    "2. Voice Search — 60% pencarian lokal via suara. Optimalisasi "
    "ke long-tail keyword dan conversational queries.\n\n"
    "3. E-E-A-T — Google perketat pengalaman, keahlian, otoritas, "
    "dan kepercayaan. Wajib menyertakan profil author, testimoni "
    "lokal, dan data terverifikasi.\n\n"
    "4. Video SEO — YouTube 3 miliar user bulanan. Video pendek "
    "jadi kunci meningkatkan dwell time dan konversi.\n\n"
    "5. Mobile-First & Core Web Vitals — Skor PageSpeed 90+ wajib. "
    "PWA jadi standar baru.\n\n"
    "6. Zero-Click & SGE — 50% hasil pencarian tanpa klik. "
    "Target featured snippet dengan struktur konten yang jelas.\n\n"
    "Baca artikel lengkapnya di tautan berikut.\n"
    f"{ARTICLE_URL}\n\n"
    "#SEO2026 #DigitalMarketing #AIMarketing #StudioSoft #SearchEverywhere"
)

linkedin_replies = [
    "Satu insight yang sering terlewat: AI Overviews bukan akhir "
    "SEO, tapi evolusi menuju Search Everywhere Optimization.\n\n"
    "Data SparkToro: 73% search intent masih di Google, tapi 27% "
    "tersebar di 40+ platform lain (ChatGPT, YouTube, Reddit, dll).\n\n"
    "Brand yang membangun visibilitas di semua platform sekarang "
    "akan unggul kompetitif di 2027.\n\n"
    "Bagaimana strategi SEO tim Anda menghadapi pergeseran ini?",

    "3 langkah konkret untuk mulai:\n\n"
    "1. Audit platform audiens — di mana mereka mencari?\n"
    "2. Optimasi managed experiences — website, GBP, sosmed\n"
    "3. Bangun influenced experiences — review, publikasi, forum\n\n"
    "Sudah siap menghadapi era AI search?\n\n"
    "studiosoft.id",
]

# ═══════════════════════════════════════════════════════════
# 3. FACEBOOK StudioSoft — 2 paragraf + hashtags
# ═══════════════════════════════════════════════════════════

fb_caption = (
    "6 Tren SEO 2026 yang Wajib Dikuasai Pebisnis\n\n"
    "SEO di 2026 berubah total. Google AI Overviews sekarang "
    "mendominasi 40% pencarian — artinya hampir setengah user "
    "mendapat jawaban langsung dari AI tanpa klik ke website.\n\n"
    "Tapi ini bukan kabar buruk. Buat yang paham trennya, ini "
    "justru peluang besar. Artikel terbaru StudioSoft membahas "
    "6 tren utama:\n\n"
    "1. AI-Driven SEO — optimasi konten biar dikutip AI\n"
    "2. Voice Search — 60% pencarian lokal via suara\n"
    "3. E-E-A-T — Google makin ketat soal kredibilitas\n"
    "4. Video SEO — YouTube 3 miliar user, Shorts jadi kunci\n"
    "5. Core Web Vitals — kecepatan website 90+\n"
    "6. Zero-Click — 50% pencarian tanpa klik, optimasi snippet\n\n"
    "Pelajari detailnya di artikel lengkap 👇\n"
    f"{ARTICLE_URL}\n\n"
    "#SEO2026 #AIOverview #SearchEverywhere #DigitalMarketing #StudioSoft"
)

fb_replies = [
    "Satu tren yang paling berdampak: AI-Driven SEO.\n\n"
    "Dulu kita optimasi biar ranking di Google. Sekarang kita "
    "optimasi biar dikutip AI. Bedanya? AI butuh konten yang "
    "terstruktur, informatif, dan menjawab pertanyaan langsung.\n\n"
    "FAQ schema, listicle, dan paragraf pembuka yang strong "
    "jadi kunci biar AI pilih konten kamu sebagai sumber.",

    "Tren lain yang jangan dilewatkan: Voice Search.\n\n"
    "60% pencarian lokal via suara. Orang nanya \"di mana "
    "toko skincare terdekat?\" bukan \"toko skincare Malang\".\n\n"
    "Optimasi ke conversational keyword + schema markup. "
    "Simple, tapi selisihnya gede banget buat traffic lokal.\n\n"
    "Studi kasus: Klien klinik kami di Lowokwaru rank #1 "
    "setelah optimasi voice. Traffic naik signifikan.",
]

# ── Execute ──

accounts = [
    ("Threads StudioSoft", ACCOUNT_THREADS, threads_caption, threads_replies,
     SLOT_THREADS, ARTICLE_URL, ARTICLE_TITLE, "6 Tren SEO 2026, AI Overview"),
    ("LinkedIn StudioSoft", ACCOUNT_LINKEDIN, linkedin_caption, linkedin_replies,
     SLOT_LINKEDIN, ARTICLE_URL, ARTICLE_TITLE, "SEO 2026, AI Overview, GEO"),
    ("FB StudioSoft", ACCOUNT_FB, fb_caption, fb_replies,
     SLOT_FB, ARTICLE_URL, ARTICLE_TITLE, "6 Tren SEO 2026 dan AI Overview"),
]

print("=" * 60)
print("STUDIOSOFT - DETAIL ARTICLE POSTING")
print("AI Overview, 6 Tren SEO 2026, Search Everywhere")
print("=" * 60)

for label, aid, caption, replies, slot, link, metat, metad in accounts:
    payload = make_payload(aid, caption, replies, link, metat, metad, slot)
    result = api_call("POST", "/public/schedule", payload)

    # convert UTC to WIB
    h_utc = slot[11:13]
    h_wib = str(int(h_utc) + 7).zfill(2)
    min_w = slot[14:16]
    
    if "error" in result:
        print(f"\n{label} ({h_wib}:{min_w} WIB): ❌ ERROR {result['error']}")
    else:
        print(f"\n{label} ({h_wib}:{min_w} WIB): ✅ {result.get('scheduleId','?')}")

print("\nDONE")
