#!/usr/bin/env python3
"""Upload 5 SEO slides ke WP StudioSoft & schedule ke Threads"""
import os, sys, json, base64, urllib.request
from datetime import datetime, timezone, timedelta
from repliz_client import HEADERS, BASE, ACC
ACCOUNT_ID = ACC.STUDIOSOFT_THREADS
WIB = timezone(timedelta(hours=7))

# === WP ===
WP_USER = "bambangbot"
WP_PASS = "q26r RePo BVy6 pwU2 F3z7 ouyl"
LOG_FILE = os.path.expanduser("~/.openclaw/workspace-atun/studiosoft_threads_log.txt")

OUT = os.path.expanduser("~/.openclaw/workspace-atun/studiosoft_carousel")

def log(msg):
    with open(LOG_FILE, "a") as f:
        f.write(f"[{datetime.now(WIB).strftime('%Y-%m-%d %H:%M:%S')} WIB] {msg}\n")
    print(msg)

def upload_to_wp(filepath, filename):
    """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(filepath, filename)

log("📤 Uploading 5 images to WordPress StudioSoft...")
files = [
    (f"{OUT}/01_cover.png", "seo_01_cover.png"),
    (f"{OUT}/02_apa_itu_seo.png", "seo_02_apa_itu_seo.png"),
    (f"{OUT}/03_mengapa_penting.png", "seo_03_mengapa_penting.png"),
    (f"{OUT}/04_jenis_seo.png", "seo_04_jenis_seo.png"),
    (f"{OUT}/05_cta.png", "seo_05_cta.png"),
]

wp_urls = []
for fp, fn in files:
    try:
        url = upload_to_wp(fp, fn)
        wp_urls.append(url)
        log(f"✅ {fn} → {url}")
    except Exception as e:
        log(f"❌ Upload failed {fn}: {e}")
        sys.exit(1)

# === Schedule ke Repliz ===
log("\n📅 Scheduling to Repliz StudioSoft Threads...")

# Cari slot kosong: skrg jam 08:06 WIB → slot berikutnya 08:00 sudah lewat → next = 11:00 WIB
today = datetime.now(WIB)
today_str = today.strftime("%Y-%m-%d")

# Slot: 05, 08, 11, 14, 17, 20, 23 — cek berikutnya
SLOTS = [5, 8, 11, 14, 17, 20, 23]
current_hour = today.hour + today.minute / 60
next_slot = None
for s in SLOTS:
    if s > current_hour:
        next_slot = s
        break
if next_slot is None:
    # Besok
    from datetime import timedelta

# === WP ===
WP_USER = "bambangbot"
WP_PASS = "q26r RePo BVy6 pwU2 F3z7 ouyl"
LOG_FILE = os.path.expanduser("~/.openclaw/workspace-atun/studiosoft_threads_log.txt")

OUT = os.path.expanduser("~/.openclaw/workspace-atun/studiosoft_carousel")

def log(msg):
    with open(LOG_FILE, "a") as f:
        f.write(f"[{datetime.now(WIB).strftime('%Y-%m-%d %H:%M:%S')} WIB] {msg}\n")
    print(msg)

def upload_to_wp(filepath, filename):
    """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(filepath, filename)

log("📤 Uploading 5 images to WordPress StudioSoft...")
files = [
    (f"{OUT}/01_cover.png", "seo_01_cover.png"),
    (f"{OUT}/02_apa_itu_seo.png", "seo_02_apa_itu_seo.png"),
    (f"{OUT}/03_mengapa_penting.png", "seo_03_mengapa_penting.png"),
    (f"{OUT}/04_jenis_seo.png", "seo_04_jenis_seo.png"),
    (f"{OUT}/05_cta.png", "seo_05_cta.png"),
]

wp_urls = []
for fp, fn in files:
    try:
        url = upload_to_wp(fp, fn)
        wp_urls.append(url)
        log(f"✅ {fn} → {url}")
    except Exception as e:
        log(f"❌ Upload failed {fn}: {e}")
        sys.exit(1)

# === Schedule ke Repliz ===
log("\n📅 Scheduling to Repliz StudioSoft Threads...")

# Cari slot kosong: skrg jam 08:06 WIB → slot berikutnya 08:00 sudah lewat → next = 11:00 WIB
today = datetime.now(WIB)
today_str = today.strftime("%Y-%m-%d")

# Slot: 05, 08, 11, 14, 17, 20, 23 — cek berikutnya
SLOTS = [5, 8, 11, 14, 17, 20, 23]
current_hour = today.hour + today.minute / 60
next_slot = None
for s in SLOTS:
    if s > current_hour:
        next_slot = s
        break
if next_slot is None:
    # Besok
    from datetime import timedelta
    tomorrow = today + timedelta(days=1)
    today_str = tomorrow.strftime("%Y-%m-%d")
    next_slot = SLOTS[0]

log(f"Slot berikutnya: {next_slot:02d}:00 WIB pada {today_str}")

texts = [
    # Post 1 — Cover + intro
    "Pernah penasaran kenapa website tertentu selalu muncul di halaman pertama Google? Jawabannya: SEO. Yuk kenali dasar-dasarnya di carousel ini! 👇\n\n#StudioSoft #SEO #DigitalMarketing",
    # Post 2 — Penjelasan SEO
    "SEO itu bukan sulap, bukan juga tebak-tebakan. SEO adalah strategi terukur yang bisa dipelajari siapa saja. Mulai dari riset kata kunci, optimasi konten, sampai technical di balik layar — semuanya butuh pendekatan yang sistematis.\n\nYang paling penting: hasil SEO itu organik dan bertahan lama. Beda sama iklan yang berhenti begitu budget habis.\n\n#StudioSoft #SEO #SearchEngineOptimization",
    # Post 3 — Kenapa penting
    "Fakta: 68% interaksi online dimulai dari mesin pencari. Dan 75% pengguna Google tidak pernah scroll ke halaman kedua. Kalau website Anda tidak ada di halaman 1, Anda kehilangan banyak calon pelanggan.\n\nUntungnya, SEO bisa dipelajari dan diterapkan secara bertahap. Mulai dari sekarang, bukan besok. 🚀\n\n#StudioSoft #DigitalStrategy #TrafficOrganik",
    # Post 4 — 3 pilar
    "SEO itu terdiri dari 3 pilar utama:\n\n🔍 On-Page SEO — optimasi konten & struktur di dalam website\n🔗 Off-Page SEO — bangun otoritas dari luar (backlink, mention)\n⚙️ Technical SEO — kecepatan, mobile-friendly, struktur data\n\nKetiganya harus jalan beriringan. Tinggal satu aja? Hasil kurang maksimal.\n\n#StudioSoft #OnPageSEO #TechnicalSEO",
    # Post 5 — CTA
    "Siap optimasi SEO untuk website bisnis Anda? Kami bantu dari audit awal sampai strategi jangka panjang. Konsultasi gratis — tanpa drama, tanpa komitmen.\n\n📩 studiosoft.id\n\n#StudioSoft #KonsultasiSEO #DigitalMarketing"
]

# Truncate to 500 chars
for i in range(len(texts)):
    if len(texts[i]) > 500:
        texts[i] = texts[i][:497] + "..."

parent_id = None
for i, (text,) in enumerate(zip(texts)):
    iso = f"{today_str}T{next_slot:02d}:{i:02d}:00+07:00"
    
    payload = {
        "title": "",
        "description": text,
        "topic": "",
        "type": "text",
        "medias": [{"url": wp_urls[i]}],
        "meta": {"title": "", "description": "", "url": ""},
        "additionalInfo": {
            "isAiGenerated": False, "isDraft": False,
            "collaborators": [], "mentions": [],
            "music": {"id": "", "artist": "", "name": "", "thumbnail": ""},
            "products": [], "tags": []
        },
        "replies": [parent_id] if parent_id else [],
        "accountId": ACCOUNT_ID,
        "scheduleAt": iso,
    }
    
    body = json.dumps(payload).encode()
    req = urllib.request.Request(f"{BASE}/public/schedule", data=body, headers=HEADERS, method="POST")
    
    try:
        with urllib.request.urlopen(req, timeout=15) as r:
            result = json.loads(r.read())
            sid = result.get("scheduleId", "?")
            log(f"✅ Post {i+1}/5 → {sid} | {next_slot:02d}:{i:02d} WIB")
            parent_id = sid
    except Exception as e:
        log(f"❌ Post {i+1}: {e}")
        sys.exit(1)

log(f"\n🎉 Selesai! 5 slide ter-schedule di Threads StudioSoft jam {next_slot:02d}:00 WIB sebagai nested thread!")

