#!/usr/bin/env python3
"""Post StudioSoft batch ss_batch_20260725 via Repliz (Threads nested + FB album + LinkedIn).
Topic (theme 25): Optimasi Konversi (CRO) — Landing Page yang Benar-Benar Menjual."""
import json, sys, os, random
sys.path.insert(0, '/home/mantapman/.hermes/profiles/atun/workspace')
from repliz_client import ReplizClient, ACC

client = ReplizClient()

COVER = "https://studiosoft.id/wp-content/uploads/2026/07/01_cover-42.png"
SLIDES = [
    "https://studiosoft.id/wp-content/uploads/2026/07/01_cover-42.png",
    "https://studiosoft.id/wp-content/uploads/2026/07/slide_02-24.png",
    "https://studiosoft.id/wp-content/uploads/2026/07/slide_03-24.png",
    "https://studiosoft.id/wp-content/uploads/2026/07/slide_04-24.png",
    "https://studiosoft.id/wp-content/uploads/2026/07/slide_05-24.png",
    "https://studiosoft.id/wp-content/uploads/2026/07/slide_06-24.png",
    "https://studiosoft.id/wp-content/uploads/2026/07/slide_07-24.png",
]

THREADS_ACC = ACC.STUDIOSOFT_THREADS
FB_ACC = ACC.STUDIOSOFT_FB
LI_ACC = ACC.STUDIOSOFT_LINKEDIN

# Schedule Aug 21, 2026 (WIB 08:00 / 08:03 / 08:06) = UTC 01:00 / 01:03 / 01:06
THREADS_AT = "2026-08-21T01:00:00.000Z"
FB_AT = "2026-08-21T01:03:00.000Z"
LI_AT = "2026-08-21T01:06:00.000Z"

# ---- Threads caption (max 500 char) ----
threads_main = (
    "Traffic website tinggi tapi penjualan jalan di tempat? Masalahnya biasanya "
    "bukan di pengunjungnya, tapi di landing page yang belum bisa mengubah "
    "kunjungan jadi aksi.\n\n"
    "Kunci konversi itu sederhana: pesan yang jelas, CTA yang tegas, dan loading "
    "yang cepat. Pengunjung tidak butuh ribuan kata — mereka butuh alasan untuk "
    "bertindak sekarang.\n\n"
    "Menurut Anda, elemen landing page apa yang paling menentukan keputusan "
    "seseorang? Yuk diskusi.\n\n"
    "studiosoft.id"
)
threads_reply1 = (
    "CTA (Call to Action) sering jadi biang keladi. Kalau tombolnya sayup-sayup, "
    "kata-katanya ambigu, pengunjung bingung mau diapain — akhirnya kabur duluan. "
    "Satu CTA yang jelas lebih ampuh dari sepuluh pilihan sekaligus.\n\n"
    "CTA seperti apa yang paling sering membuat Anda tergoda mengeklik?"
)
threads_reply2 = (
    "Kecepatan loading juga tidak kalah penting. Pengunjung yang sabar menunggu "
    "website nyaris tidak ada — selama lebih dari 3 detik, banyak yang langsung "
    "pergi. Website cepat adalah konversi yang tersembunyi.\n\n"
    "Pernah tinggalkan website karena lama loading? Ceritakan pengalamannya! 👇"
)

# ---- FB caption (2 paragraf + hashtags) ----
fb_caption = (
    "Traffic tinggi tidak otomatis berarti penjualan naik. 🚀 Banyak bisnis fokus "
    "mengejar pengunjung website, tapi lupa satu hal penting: landing page yang "
    "bisa mengubah pengunjung menjadi pembeli. Optimasi konversi (CRO) adalah "
    "seni membuat pesan yang jelas, CTA yang tegas, dan pengalaman yang nyaman — "
    "sehingga setiap kunjungan punya peluang lebih besar menjadi aksi nyata.\n\n"
    "Mulai dari yang paling sederhana: pastikan nilai Anda tersampaikan dalam "
    "beberapa detik pertama, satu ajakan bertindak yang tidak ambigu, dan "
    "kecepatan loading yang cepat. Ketiga hal ini sering diremehkan, padahal "
    "dampaknya langsung terasa pada angka penjualan.\n\n"
    "Menurut Anda, elemen apa yang paling sering membuat pengunjung langsung "
    "percaya dan membeli dari sebuah website? Bagikan pengalaman Anda di kolom "
    "komentar.\n\n"
    "studiosoft.id\n\n"
    "#DigitalMarketing #StudioSoft #SEO #Branding #BisnisSurabaya #LandingPage"
)

# ---- LinkedIn caption (1 paragraf, opini profesional) ----
li_caption = (
    "Banyak perusahaan mengukur kesuksesan digital dari besarnya traffic, padahal "
    "metrik yang lebih jujur adalah konversi. Landing page yang baik tidak harus "
    "rumit — ia hanya perlu menjawab satu pertanyaan pengunjung: mengapa saya "
    "harus bertindak sekarang?\n\n"
    "Dengan pesan yang tajam, CTA yang jelas, dan performa yang cepat, setiap "
    "pengunjung yang sudah datang berubah menjadi peluang nyata, bukan sekadar "
    "angka di dashboard analytics.\n\n"
    "Apakah bisnis Anda sudah mengoptimalkan konversi, atau masih sekadar "
    "mengejar jumlah pengunjung? Mari berdiskusi.\n\n"
    "studiosoft.id"
)

def make_media(url, alt):
    return {"url": url, "type": "image", "alt": alt}

results = {}
log_entry = {
    "timestamp": "2026-08-20T18:00:00.000000+00:00",
    "item_id": "ss_batch_20260725",
    "brand": "studiosoft",
    "date": "20260725",
    "schedule_times": {},
    "repliz_ids": {},
    "next_index": 25
}

# 1. Threads: main (image cover) + 2 nested text replies
try:
    medias = [make_media(COVER, "01_cover.png")]
    r = client.create_schedule(THREADS_ACC, threads_main, THREADS_AT,
                               title="", type_="image", medias=medias, topic="")
    sid = r.get("scheduleId") or r.get("_id") or r.get("id") or "unknown"
    results["threads_ss_main"] = sid
    print(f"✅ Threads main: {sid}")

    r1 = client.create_schedule(THREADS_ACC, threads_reply1, THREADS_AT,
                                title="", type_="text")
    s1 = r1.get("scheduleId") or r1.get("_id") or r1.get("id") or "unknown"
    results["threads_ss_reply1"] = s1
    print(f"✅ Threads reply1: {s1}")

    r2 = client.create_schedule(THREADS_ACC, threads_reply2, THREADS_AT,
                                title="", type_="text")
    s2 = r2.get("scheduleId") or r2.get("_id") or r2.get("id") or "unknown"
    results["threads_ss_reply2"] = s2
    print(f"✅ Threads reply2: {s2}")
except Exception as e:
    print(f"❌ Threads error: {e}")
    import traceback; traceback.print_exc()

# 2. FB: album with 7 slides
try:
    fb_medias = [make_media(u, f"slide_{i}.png") for i, u in enumerate(SLIDES, 1)]
    r = client.create_schedule(FB_ACC, fb_caption, FB_AT,
                               title="", type_="album", medias=fb_medias, topic="")
    sid = r.get("scheduleId") or r.get("_id") or r.get("id") or "unknown"
    results["fb_ss"] = sid
    print(f"✅ FB album: {sid}")
except Exception as e:
    print(f"❌ FB error: {e}")
    import traceback; traceback.print_exc()

# 3. LinkedIn: 1 paragraph + 1 image
try:
    li_medias = [make_media(COVER, "01_cover.png")]
    r = client.create_schedule(LI_ACC, li_caption, LI_AT,
                               title="", type_="image", medias=li_medias, topic="")
    sid = r.get("scheduleId") or r.get("_id") or r.get("id") or "unknown"
    results["linkedin_ss"] = sid
    print(f"✅ LinkedIn: {sid}")
except Exception as e:
    print(f"❌ LinkedIn error: {e}")
    import traceback; traceback.print_exc()

# ---- Update log & state ----
log_entry["schedule_times"] = {
    "threads_ss_main": f"{THREADS_AT} (08:00 WIB) - image cover + 2 nested text",
    "fb_ss": f"{FB_AT} (08:03 WIB) - album 7 slides",
    "linkedin_ss": f"{LI_AT} (08:06 WIB) - image 1 cover"
}
log_entry["repliz_ids"] = results

# Append to log
log_path = os.path.join(os.path.dirname(__file__), "image_posting_log.json")
try:
    with open(log_path) as f:
        log = json.load(f)
except (FileNotFoundError, json.JSONDecodeError):
    log = []
log.append(log_entry)
with open(log_path, "w") as f:
    json.dump(log, f, indent=2, ensure_ascii=False)
print(f"✅ Log updated: {len(log)} entries")

# Update state
state_path = os.path.join(os.path.dirname(__file__), "image_posting_state.json")
with open(state_path) as f:
    state = json.load(f)
state["index"] = log_entry["next_index"]
with open(state_path, "w") as f:
    json.dump(state, f, indent=2)
print(f"✅ State updated: index -> {state['index']}")

print("\n=== DONE ===")
print(json.dumps(results, indent=2))
