#!/usr/bin/env python3
"""Isi ulang slot storytelling 12-13 Sep dengan framework 5 babak (Konteks-Karakter-Konflik-Klimaks-Kesimpulan)."""
import sys, json, urllib.request
sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import HEADERS, BASE

WIB = __import__("datetime").timezone(__import__("datetime").timedelta(hours=7))
from datetime import datetime, timedelta, timezone
UKY_T = "6a334e89c5ff4ce3a3225a48"
SLOTS = [5, 8, 11, 14, 17, 20, 23]

# Cerita framework 5 babak (fresh — belum pernah dipakai)
STORIES = [
    ("Klien pertama yang percaya", 
     "Waktu itu saya masih belajar bikin website, belum punya portofolio apa-apa.",
     "Pemilik toko sembako yang jualan dari pagi sampai malam — orang pertama yang mau mempekerjakan saya.",
     "Saya takut hasilnya mengecewakan. Beliau juga awalnya ragu, tapi butuh website untuk tokonya.",
     "Saya bilang jujur: 'ini masih belajar, tapi saya kasih harga khusus.' Beliau jawab: 'yang penting niatnya bagus, saya percaya.' Website jadi, tokonya mulai dapat pesanan online.",
     "Kepercayaan lahir dari kejujuran, bukan dari kesempurnaan. Kita tidak perlu menunggu sempurna untuk mulai membantu orang lain.\n\nPunya cerita kepercayaan pertama di bisnismu? Cerita di komentar! 👇"),
    ("Gagal 6 bulan sebelum naik kelas",
     "Dulu saya garap website klien dengan janji hasil 3 bulan.",
     "Saya yang masih percaya diri berlebihan, dan klien yang sabar menunggu.",
     "6 bulan berlalu, website masih di halaman 5 Google. Klien mulai ragu, saya mulai panik.",
     "Saya bongkar semuanya: keyword terlalu kompetitif, konten asal, teknis diabaikan. Mulai ulang dari riset — 3 bulan kemudian masuk halaman 1 untuk 12 kata kunci.",
     "Kegagalan panjang itu kurikulum paling berharga. Gagal bukan akhir — ia titik balik kalau kita mau belajar.\n\nPernah gagal lama lalu jadi titik balik? Cerita di komentar! 👇"),
    ("Perjalanan 3 jam untuk satu kepercayaan",
     "Suatu sore saya dapat chat dari toko offline di kota sebelah yang ingin go-digital.",
     "Pemilik toko yang bangga dengan produknya, dan saya yang sibuk dengan jadwal padat.",
     "Beliau minta bertemu langsung — 3 jam perjalanan. Saya sempat ragu: sepadankah?",
     "Saya putuskan berangkat. Di toko itu kami ngobrol lama — bukan soal website, tapi soal pelanggan dan harapannya. Saya pulang membawa kepercayaan, bukan sekadar proyek.",
     "Kadang yang paling berharga bukan strategi canggih, tapi kehadiran kita saat orang butuh.\n\nPernah jauh-jauh demi kepercayaan? Cerita di komentar! 👇"),
    ("Uang pertama dari internet",
     "Malam biasa di kamar kos, saya baru selesai proyek kecil pertamaku.",
     "Saya — pemuda yang belajar dari tutorial gratis, tanpa ijazah coding.",
     "Saya takut nominalnya kecil dan tak dianggap serius oleh orang lain.",
     "Malam itu saya cek rekening berkali-kali. Ada transfer masuk — dari orang yang membayar hasil kerja saya. Rasanya beda: bukan soal nominal, tapi soal diakui.",
     "Internet membuka pintu yang tadinya tertutup. Siapa pun bisa mulai — asal mau belajar dan konsisten.\n\nKamu ingat penghasilan pertama dari internet? Cerita yuk! 👇"),
    ("Review yang mengubah segalanya",
     "Website klien kami sepi pengunjung, padahal produknya bagus.",
     "Pemilik usaha kecil yang jujur, pelanggannya yang puas, dan kami yang mulai putus asa.",
     "Orang tidak percaya — bukan karena produk jelek, tapi karena reputasi belum terbangun.",
     "Seorang pelanggan menulis review panjang dan tulus. Beberapa minggu kemudian review itu muncul di pencarian Google — dan orang mulai percaya, karena yang merekomendasikan bukan kami.",
     "Kepercayaan paling kuat datang dari pihak ketiga. Rawat reputasi online — itu aset tak terlihat tapi menentukan.\n\nPernah beli karena review orang? Cerita di komentar! 👇"),
    ("Pelanggan yang batal, lalu kembali",
     "Beberapa tahun lalu, calon klien batal kerja sama di menit-menit terakhir.",
     "Beliau yang ragu-ragu memilih vendor lain; saya yang kecewa tapi memilih tetap profesional.",
     "Godaan membalas dingin sangat besar. Tapi saya pilih jalan lain: tetap menjaga komunikasi, sesekali kirim konten bermanfaat tanpa memaksa.",
     "Enam bulan kemudian beliau chat: 'yang kemarin tidak sesuai, masih bisa kerja sama?' Kami bekerja sama sampai sekarang.",
     "Orang boleh menunda, tapi kalau kita tetap bermanfaat, mereka akan ingat. Jualan itu maraton, bukan sprint.\n\nPernah ngalamin pelanggan balik lagi? Cerita di komentar! 👇"),
    ("Orang tua yang tidak paham kerja online",
     "Di awal karier, orang tua sering bingung melihat saya di depan laptop berjam-jam.",
     "Ibu dan Bapak — generasi yang terbiasa kerja di tempat yang jelas. Saya, anak yang 'kerjanya main komputer'.",
     "Setiap ditanya 'kerja apa?', saya kesulitan menjelaskan. Saya ingin mereka bangga, tapi belum ada bukti.",
     "Suatu hari tetangga bilang ke ibu: 'anaknya hebat, bikin toko online tetangga laku.' Wajah ibu bersinar. Sejak itu mereka tidak pernah ragu lagi.",
     "Kadang kita cuma butuh satu momen di mana usaha kita diakui. Terus bekerja — hasilnya yang bicara.\n\nPunya pengalaman kerja yang tidak dipahami keluarga? Cerita di komentar! 👇"),
    ("Membangun dari nol itu menakutkan",
     "Sebelum punya tim, saya mengerjakan semuanya sendiri — desain, konten, pemasaran, bales chat.",
     "Saya — satu orang yang harus jadi banyak peran, modal pas-pasan, banyak yang belum tahu.",
     "Ada malam-malam ketika saya bertanya: 'ini jalan yang benar nggak sih?' Tidak ada yang bisa diajak berbagi beban.",
     "Perlahan saya sadar: tidak apa-apa tidak tahu segalanya. Yang penting tahu ke mana bertanya dan berani minta bantuan. Dari situlah tim mulai terbentuk.",
     "Membangun dari nol menakutkan, tapi justru di situ pertumbuhan terjadi. Tidak perlu sempurna — cukup mulai dan terus belajar.\n\nApa bagian tersulit dari perjalananmu? Cerita di komentar! 👇"),
]

def get_pending():
    pend = []
    for p in range(1, 60):
        raw = urllib.request.Request(f"{BASE}/public/schedule?page={p}&limit=100", headers=HEADERS)
        with urllib.request.urlopen(raw, timeout=30) as r:
            docs = json.load(r)["docs"]
        for d in docs:
            if d.get("accountId") == UKY_T and (d.get("status") or "").lower() == "pending":
                pend.append(d)
    return pend

pend = get_pending()
taken = {(d.get("scheduleAt") or "")[:13] for d in pend}
now = datetime.now(WIB)
day = now.replace(minute=0, second=0, microsecond=0)

ok = fail = 0
for judul, konteks, karakter, konflik, klimaks, kesimpulan in STORIES:
    slot = None
    for _ in range(14):
        for h in SLOTS:
            cand = day.replace(hour=h)
            if cand <= now:
                continue
            utc_h = cand.astimezone(timezone.utc).strftime("%Y-%m-%dT%H")
            if utc_h not in taken:
                slot = cand
                break
        if slot:
            break
        day += timedelta(days=1)
    if slot is None:
        break
    taken.add(slot.astimezone(timezone.utc).strftime("%Y-%m-%dT%H"))
    at = slot.astimezone(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.000Z")
    cap = (f"📖 {judul}\n\n"
           f"Konteks — {konteks}\n\n"
           f"Karakter — {karakter}\n\n"
           f"Konflik — {konflik}\n\n"
           f"Klimaks — {klimaks}\n\n"
           f"Kesimpulan — {kesimpulan}\n\n"
           f"#Storytelling #BisnisDigital #UMKM #PengalamanBisnis")
    payload = {
        "accountId": UKY_T, "title": f"Cerita: {judul}",
        "description": cap, "topic": "Storytelling", "type": "text",
        "medias": [], "scheduleAt": at,
        "replies": [{"text": "Setiap cerita pasti ada pelajaran. Semoga menginspirasi! 💪", "username": ""}],
    }
    req = urllib.request.Request(f"{BASE}/public/schedule",
                                 data=json.dumps(payload).encode(),
                                 headers={**HEADERS, "Content-Type": "application/json"})
    try:
        with urllib.request.urlopen(req, timeout=30) as r:
            res = json.load(r)
        ok += 1
        print(f"  ✅ {slot.strftime('%d/%m %H:00')} WIB | {judul}")
    except Exception as e:
        fail += 1
        print(f"  ❌ {judul}: {e}")
print(f"\n📊 Total: {ok} OK, {fail} gagal")
