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": "portrait",
        "count": 1
    }
    print(f"\n🎨 {slide_name}...")
    sys.stdout.flush()
    
    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(10)
            try:
                status_req = urllib.request.Request(
                    f'{BASE}/generations/{gen_id}',
                    headers={'Authorization': f'Bearer {API_KEY}', 'User-Agent': 'Mozilla/5.0'}
                )
                with urllib.request.urlopen(status_req, timeout=20) as sr:
                    status = json.loads(sr.read())
                    s = status.get('status')
                    print(f"  ({i+1}/30) {s}")
                    sys.stdout.flush()
                    if s == 'completed':
                        url = status.get('asset_url')
                        print(f"✅ {slide_name} DONE!")
                        print(f"📸 {url}")
                        return url
                    elif s == 'failed':
                        print(f"❌ FAILED: {status.get('error_message')}")
                        return None
            except Exception as e:
                print(f"  ⚠️ Retry... ({e})")
                time.sleep(5)
                continue
    return None

# SLIDE 5 - FIRST IMPRESSION
p5 = """Instagram carousel slide portrait ukuran feed Instagram. Flat vector illustration style.

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

Ilustrasi: dua karakter baru bertemu, salah satu ekspresi mikir dengan tanda tanya dan jam dinding kecil menunjukkan 7 detik. Gelembung di kepala karakter menunjukkan penilaian instan. Style flat minimalis.

Teks hook besar font bold di atas:
"7 DETIK PERTAMA BERTEMU"
"OTAK UDAH NILAI ORANG"

Teks konten di bawah:
"Bawah sadar — berdasar pengalaman"
"dan pola masa lalu."
"Makanya kadang gak suka seseorang"
"tanpa alasan jelas."

Desain bersih, font gede, mudah dibaca."""

generate("Slide 5 - First Impression", p5)
