import json, urllib.request, time, sys

API_KEY = "vio_sk_vA8llIYm51J3oyXtfevrM92yUBJ8-3IS1sIn6xydF8o"
BASE = "https://api.viostudio.id/v1"

urls = {}

def generate(slide_name, prompt):
    payload = {"prompt": prompt, "model": "gpt-image-2.0", "aspect_ratio": "3:4", "count": 1}
    print(f"\n🎨 {slide_name}...")
    sys.stdout.flush()
    for attempt in range(3):
        try:
            req = urllib.request.Request(f'{BASE}/images/generate',
                data=json.dumps(payload).encode(),
                headers={'Content-Type':'application/json','Authorization':f'Bearer {API_KEY}','User-Agent':'Mozilla/5.0'},
                method='POST')
            with urllib.request.urlopen(req, timeout=60) as resp:
                gen_id = json.loads(resp.read()).get('generation_ids',[0])[0]
                print(f"✅ Queued ID: {gen_id}")
                sys.stdout.flush()
                for i in range(30):
                    time.sleep(8)
                    try:
                        sr = urllib.request.Request(f'{BASE}/generations/{gen_id}',
                            headers={'Authorization':f'Bearer {API_KEY}','User-Agent':'Mozilla/5.0'})
                        with urllib.request.urlopen(sr, timeout=20) as s:
                            st = json.loads(s.read())
                            stat = st.get('status')
                            print(f"  ({i+1}/30) {stat}")
                            sys.stdout.flush()
                            if stat == 'completed':
                                print(f"✅ {slide_name} DONE!\n📸 {st.get('asset_url')}")
                                return st.get('asset_url')
                            elif stat == 'failed':
                                print(f"❌ FAILED: {st.get('error_message')}")
                                return None
                    except:
                        time.sleep(5)
        except Exception as e:
            print(f"  ⚠️ Retry {attempt+1}/3... ({e})")
            time.sleep(5)

urls['slide5'] = generate("SM | Slide 5 - Perbesar Motivasi", """Instagram carousel slide 3:4 aspect ratio ukuran feed Instagram. Flat vector illustration style infografis.

Background gradasi soft cream ke deep teal blue. Aksen orange.

Ilustrasi: Remote control yang sama dari slide 4, sekarang dipake buat MEMPERBESAR ingatan positif.

Sebelum: Ingatan "pujian bos" — KECIL di pojok, hitam putih, redup, jauh, sunyi. Rasanya: biasa aja.

Slider digerakin: SIZE ke MAX. BRIGHTNESS ke MAX. COLOR full. Distance: DEKAT banget. Volume: KERAS. Tambahin soundtrack epic.

Sesudah: Ingatan "pujian bos" sekarang BESAR, CERAH, DEKAT, BERWARNA, ada musik epik — jadi sumber motivasi instan.

Teks HEADLINE bold:
BUKAN CUMA NGECILIN TRAUMA. LO JUGA BISA NGEDEIN MOTIVASI.

Teks penjelasan:
Ingatan positif lo yang kecil-kecil? Gedein. Deketin. Warnain. Kerasin. Lo bisa bikin ingatan "gue bisa" jadi se-IMAX trauma lo.

Desain infografis empowering.""")

urls['slide6'] = generate("SM | Slide 6 - Praktik Setiap Hari", """Instagram carousel slide 3:4 aspect ratio ukuran feed Instagram. Flat vector illustration style infografis actionable.

Background gradasi soft cream ke deep teal blue. Aksen orange.

Ilustrasi: Karakter lagi duduk santai, mata merem, di depan otaknya ada panel kontrol submodalities yang bisa dia otak-atik. Kayak lagi MIXING AUDIO — tapi yang dia mix adalah ingatan.

3 latihan harian:

Latihan 1 (ikon matahari terbit): SUBMODALITIES CHECK-IN — Setiap pagi, tanya: Ada ingatan mengganggu yang lagi LOOP? Kecilin. Jauhin. Jadiin hitam putih. (2 menit)

Latihan 2 (ikon trophy): AMPLIFY THE GOOD — Ambil 1 ingatan di mana lo ngerasa BANGGA/BISA. Gedein. Deketin. Warnain. Kerasin. Rasain energi-nya. (2 menit)

Latihan 3 (ikon remote control): SHIFT YOUR STATE — Sebelum meeting penting atau presentasi, akses ingatan BISA-MOTIVASI yang udah lo gedein. Biarin energi-nya ngisi diri lo. (1 menit)

Teks HEADLINE bold:
LATIHAN SUBMODALITIES HARIAN (CUMA 5 MENIT)

Teks penutup:
Ini kayak olahraga mental. Makin sering, makin jago. Dan hidup lo makin gampang.

Desain infografis actionable.""")

urls['slide7'] = generate("SM | Slide 7 - Closing", """Instagram carousel closing slide 3:4 aspect ratio ukuran feed Instagram. Flat vector illustration style hangat.

Background gradasi soft cream ke deep teal blue hangat. Aksen orange.

Ilustrasi: Karakter duduk di kursi sutradara, di depannya ada layar besar. Di layar ada berbagai adegan dari hidupnya: masa kecil, masa remaja, kenangan malu, kenangan bangga. Tapi sekarang dia yang pegang REMOTE. Dia SUTRADARA dari semua ingatan itu.

Dia bisa bikin yang traumatis jadi kecil dan jauh. Dia bisa bikin yang membanggakan jadi besar dan dekat.

Di bawah kursi sutradara ada teks: LO SUTRADARA PIKIRAN LO. BUKAN PENONTON.

Teks HEADLINE besar font bold:
LO YANG ATUR. BUKAN INGATAN LO.

Teks body medium:
Selama ini lo ngerasa jadi KORBAN ingatan lo sendiri. Trauma datang gak diundang. Prestasi lo lupa.

Sekarang lo tau: ingatan lo dikodekan pake submodalities. Dan lo BISA atur slider-nya. Kapan aja.

Teks hook:
Otak lo kasih lo remote control. Tinggal lo pake atau enggak. ikon tanaman

Teks CTA pojok bawah:
Follow balimentari

Teks kecil di atas CTA:
Tag temen yang suka keinget malu mulu 😬

Desain closing empowering.""")

print("\n✅ SUBMOD BATCH 2 COMPLETE!")
print("\nURLs:", json.dumps(urls, indent=2))
