import json, urllib.request, time, sys

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

def generate():
    prompt = """Instagram carousel closing slide portrait ukuran feed Instagram. Flat vector illustration style.

Background gradasi soft cream ke deep teal blue. Aksen orange hangat (#FF9F43).

Ilustrasi: dua karakter saling berhadapan, satu karakter (teal) memberikan sebuah kunci ke karakter lain (orange) yang menerimanya dengan senyum. Simbol kunci melambangkan "kendali". Style flat minimalis.

Teks besar font bold di bagian atas:
"BAWAH SADAR ITU GAK JAHAT"

Teks ukuran medium di tengah:
"Dia cuma setia sama program"
"yang pernah kamu kasih."

Teks hook penutup di bawah:
"Kamu bisa ubah program itu."
"Pelan-pelan. Konsisten. 🌱"

Teks kecil di pojok bawah:
"Follow @balimentari"

Desain closing yang hangat, memotivasi, font besar dan jelas."""

    payload = {
        "prompt": prompt,
        "model": "gpt-image-2.0",
        "aspect_ratio": "portrait",
        "count": 1
    }
    print("🎨 Slide 7 - Closing...")
    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"\n✅ CLOSING 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

generate()
