import json, urllib.request, time, sys

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

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
                            elif stat == 'failed':
                                print(f"❌ FAILED: {st.get('error_message')}")
                                return
                    except:
                        time.sleep(5)
        except Exception as e:
            print(f"  ⚠️ Retry {attempt+1}/3... ({e})")
            time.sleep(5)

generate("Slide 4 - Contoh Nyata", """Instagram carousel slide 3:4 aspect ratio ukuran feed Instagram. Flat vector illustration style.

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

Ilustrasi: seorang karakter berdiri dengan pose pede tangan di pinggang dan senyum lebar. Tapi di belakangnya ada bayangan versi lain yang ekspresinya insecure gemeteran dan kecil. Di atas kepala karakter ada gelembung teks afirmasi AKU PERCAYA DIRI dengan tanda tanya besar. Celah antara karakter asli dan bayangan. Style flat minimalis.

Teks headline di atas:
"CONTOH NYATA"

Teks penjelasan di bawah:
"Afirmasi AKU PERCAYA DIRI tapi bawah sadar hafal data 10 tahun jadi orang malu. Makin dikata AKU PEDE makin terasa hampa. Itu tandanya gap terlalu lebar."

Font besar jelas.""")

generate("Slide 5 - Solusi Bridge The Gap", """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: sebuah jembatan yang menghubungkan dua sisi. Di sisi kiri ada tulisan SADAR dengan ikon lampu. Di sisi kanan BAWAH SADAR dengan ikon gembok terbuka. Empat tiang penyangga jembatan dengan nomor 1 2 3 4. Karakter berjalan di atas jembatan. Style flat minimalis.

Teks headline di atas:
"BRIDGE THE GAP"

Empat step vertikal dengan bullet:
1. Afirmasi realistik - Aku belajar pede lebih gampang diterima
2. Dibarengin perasaan - Afirmasi tanpa rasa sama aja bohong
3. Repetisi waktu tepat - Pas tidur dan bangun satpam lagi tidur
4. Bukti kecil - Afirmasi lakuin hal kecil bukti baru buat bawah sadar

Desain step by step rapi font besar.""")

generate("Slide 6 - Closing", """Instagram carousel slide 3:4 aspect ratio ukuran feed Instagram. Flat vector illustration style.

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

Ilustrasi: seorang karakter duduk tenang merenung di dekat jendela dengan cahaya hangat masuk. Di pangkuannya ada buku kecil. Di sekeliling ada ikon kecil: hati checklist dan bintang. Nuansa damai hangat. Style flat minimalis.

Teks headline besar font bold di atas:
"AFIRMASI BUKAN MANTRA AJAIB"

Teks di tengah:
"Dia latihan otak."
"Gak bisa instan."
"Harus konsisten dibuktiin."

Teks CTA di pojok bawah:
"Follow balimentari"

Gaya closing hangat memotivasi.""")

print("\n✅ BATCH 4-6 COMPLETE!")
