#!/usr/bin/env python3
"""
RESTORE carousel IG StudioSoft (SSIGSEP_06..30) — salah terhapus 5 Sep 2026.
Buat ulang 1 album/hari 08:00 WIB (01:00 UTC), 4 slide per album, caption tematik SEO/DM.
Caption asli ikut terhapus saat jadwal dihapus — dibuat ulang dengan tema yang konsisten dengan seri.
"""
import sys, json, urllib.request, os, re
from datetime import datetime, timedelta, timezone

sys.path.insert(0, "/home/mantapman/.hermes/profiles/atun/workspace")
from repliz_client import HEADERS, BASE

WIB = timezone(timedelta(hours=7))
SS_IG = "6a38ac33c5ff4ce3a3231232"
IMG_BASE = "https://mantapserver.tail3947bb.ts.net/openclaw-img/"

# Topik harian (konsisten dgn seri SSIGSEP: SEO & Digital Marketing) — 06 s.d. 30
TOPIK = {
    6: "Orang Surabaya mencari 'dekat saya' setiap hari. Local SEO itu cara biar bisnis kamu muncul duluan — sebelum kompetitor. Bukan sulap, tapi strategi yang konsisten.",
    7: "On-page dan off-page itu dua sisi koin SEO. Satu bikin halamanmu enak dibaca mesin, satu bikin situs lain percaya. Dua-duanya wajib, bukan pilih-pilih.",
    8: "Backlink itu rekomendasi: situs lain bilang kontenmu layak. Tapi bukan asal menautkan — kualitas dan relevansi lebih penting dari jumlah.",
    9: "SEO bukan monopoli perusahaan besar. UMKM kecil juga bisa bersaing kalau tahu kata kunci yang tepat dan konsisten menulis konten yang membantu.",
    10: "Website lambat = pelanggan kabur. 53% pengunjung pergi kalau loading lebih dari 3 detik — dan Google mencatatnya sebagai sinyal ranking.",
    11: "Konten yang menjawab pertanyaan orang, bukan sekadar mengejar kata kunci. Itu bedanya website yang sepi dan website yang ramai dikunjungi.",
    12: "AI Overview mengubah cara orang mencari: dari daftar link jadi jawaban langsung. Optimasi konten untuk AI search adalah peluang baru.",
    13: "Google Business Profile itu etalase gratis di Google Maps. Profil lengkap + foto bagus + review positif = orang mudah menemukan dan memilihmu.",
    14: "Riset kata kunci bukan tebak-tebakan. Pakai data: apa yang orang cari, seberapa sering, dan seberapa sulit untuk dimenangkan.",
    15: "Mobile-first itu bukan pilihan lagi. Mayoritas pencarian terjadi dari HP — website yang enak dibuka di layar kecil akan menang.",
    16: "Konten visual menarik perhatian, tapi konten yang membantu membangun kepercayaan. Strategi yang seimbang lebih efektif jangka panjang.",
    17: "Landing page yang baik itu fokus: satu tawaran, satu ajakan. Terlalu banyak pilihan justru bikin calon pelanggan bingung dan pergi.",
    18: "Media sosial bikin orang tahu kamu ada. Website bikin mereka percaya dan membeli. Dua-duanya saling melengkapi, bukan menggantikan.",
    19: "Update algoritma Google itu rutin. Yang bertahan bukan yang paling pintar, tapi yang paling cepat beradaptasi dengan perubahan.",
    20: "Data analytics itu kompas bisnis digital: siapa pengunjungmu, dari mana, dan apa yang mereka lakukan. Tanpa data, semua cuma tebakan.",
    21: "Brand awareness itu dibangun dari konsistensi, bukan dari sekali viral. Konten rutin yang relevan jauh lebih berharga dari serangan mendadak.",
    22: "Funnel marketing: kenalan, tertarik, yakin, beli. Konten yang baik mengantar calon pelanggan melewati tiap tahap dengan nyaman.",
    23: "Email marketing belum mati — justru salah satu channel dengan ROI tertinggi. Yang penting: kirim nilai, bukan sekadar promosi.",
    24: "Website sehat itu bukan cuma tampilan. Kecepatan, keamanan (HTTPS), dan pengalaman pengguna adalah fondasi yang tidak terlihat tapi menentukan.",
    25: "Google E-E-A-T: pengalaman, keahlian, otoritas, kepercayaan. Konten dari sumber yang kredibel selalu menang di hasil pencarian.",
    26: "Social proof itu nyata: review, testimoni, dan studi kasus mengubah pengunjung menjadi pelanggan. Biarkan pelangganmu bicara.",
    27: "Konten evergreen itu aset: ditulis sekali, dicari orang terus. Kombinasi artikel tahan lama + konten tren = strategi jangka panjang.",
    28: "GEO (Generative Engine Optimization) adalah evolusi SEO untuk era AI. Optimasi agar kontenmu dipilih sebagai jawaban oleh mesin AI.",
    29: "Iklan berbayar bikin kamu cepat terlihat; SEO bikin kamu terlihat terus. Yang cerdas memakai keduanya secara strategis.",
    30: "Digital marketing itu maraton, bukan sprint. Yang konsisten belajar dan beradaptasi, dialah yang akan bertahan dan menang.",
}

def main():
    # cek file di server utk tiap tanggal
    avail = {}
    for n in range(6, 31):
        slides = sorted([f for f in os.listdir("/home/mantapman/.hermes/profiles/atun/workspace/openclaw-img")
                         if f.startswith(f"SSIGSEP_{n:02d}_")])
        if len(slides) >= 4:
            avail[n] = slides
    print(f"📂 album SSIGSEP 06-30 tersedia di server: {len(avail)}")

    # cek jadwal existing utk anti-dobel
    existing = set()
    for p in range(1, 90):
        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") == SS_IG and (d.get("status") or "").lower() == "pending":
                for m in (d.get("medias") or []):
                    mm = re.match(r"SSIGSEP_(\d+)_01", m.get("url", ""))
                    if mm:
                        existing.add(int(mm.group(1)))
    print(f"⚠️ album yang sudah terjadwal (pending): {sorted(existing)}")

    ok = fail = 0
    for n, slides in sorted(avail.items()):
        if n in existing:
            print(f"  ⏭️  SSIGSEP_{n:02d} sudah terjadwal")
            continue
        at = f"2026-09-{n:02d}T01:00:00.000Z"  # 08:00 WIB
        cap = TOPIK.get(n, f"Edukasi SEO & digital marketing hari ini — poin pentingnya ada di slide. Simak sampai akhir, lalu cerita pendapatmu! 👇")
        medias = [{"url": IMG_BASE + s, "type": "image", "alt": s} for s in slides[:4]]
        payload = {
            "accountId": SS_IG,
            "title": cap[:45],
            "description": cap,
            "topic": "Carousel SEO",
            "type": "album",
            "medias": medias,
            "scheduleAt": at,
            "replies": [],
        }
        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"  ✅ {at} | SSIGSEP_{n:02d} (4 slide)")
        except Exception as e:
            fail += 1
            print(f"  ❌ SSIGSEP_{n:02d}: {e}")
    print(f"\n📊 Total: {ok} OK, {fail} gagal")

if __name__ == "__main__":
    main()
