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:
                result = json.loads(resp.read())
                gen_id = result.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':
                                url = st.get('asset_url')
                                print(f"✅ {slide_name} DONE!\n📸 {url}")
                                return url
                            elif stat == 'failed':
                                print(f"❌ FAILED: {st.get('error_message')}")
                                return None
                    except:
                        time.sleep(5)
                        continue
                return None
        except Exception as e:
            print(f"  ⚠️ Retry {attempt+1}/3... ({e})")
            time.sleep(5)

# SLIDE 1 - COVER
generate("Slide 1 - Cover", """Instagram carousel cover slide 3:4 aspect ratio ukuran feed Instagram. Flat vector illustration style modern minimalis.

Background gradasi dari soft cream (#FFF8F0) ke deep teal blue (#1A5F7A). Aksen dekoratif garis lengkung organik dan titik-titik kecil warna orange (#FF9F43).

Ilustrasi utama: seorang karakter duduk santai sambil memegang setir mobil, tapi mata karakter terpejam dan ada ikon mimpi/pikiran di atas kepalanya melambangkan autopilot bawah sadar. Style flat vector minimalis.

Teks HOOK paling besar dan bold di bagian atas font sans-serif tebal ukuran sangat besar:
KAMU PIKIR KAMU
YANG KENDALIIN?

Teks sub-heading ukuran sedang di bawah hook: Coba deh cek contoh-contoh ini...

Teks kecil di pojok bawah: Geser

Elemen dekoratif: mata besar dengan pola spiral di irisnya melambangkan bawah sadar. Warna orange sebagai aksen. Desain bold striking font sangat besar dan mudah terbaca.""")

# SLIDE 2 - NYETIR
generate("Slide 2 - Nyetir", """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 lagi nyetir mobil tatapan kosong gelembung pikiran menunjukkan karakter sedang melamun di pantai. Style flat minimalis.

Teks hook besar font bold di atas:
PERNAH NYETIR SAMPE TUJUAN
TAPI GAK INGET JALANNYA?

Teks konten di bawah: Itu bawah sadar yang nyetir. Sadar kamu lagi ngelamun. Otomatis karena udah diulang ratusan kali.

Desain bersih font gede mudah dibaca di HP.""")

# SLIDE 3 - NGETIK
generate("Slide 3 - Ngetik", """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: keyboard dengan dua tangan mengetik mata karakter malah nonton TV. Style flat minimalis.

Teks hook besar font bold di atas:
COBA SEBUTIN URUTAN HURUF
BARIS KEDUA KEYBOARD...

Teks konten di bawah: Susah kan? Tapi jari kamu bisa ngetik tanpa liat. Itu bawah sadar hafal gerakan bukan visualnya.

Desain bersih font gede.""")

print("\n✅ BATCH 1-3 COMPLETE!")
