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['slide1'] = generate("EC | Slide 1 - Cover", """Instagram carousel cover slide 3:4 aspect ratio ukuran feed Instagram. Flat vector illustration style.

Background gradasi soft cream ke deep teal blue. Nuansa misterius-intrigue.

Ilustrasi: Close-up wajah karakter. Matanya besar, sorot tajam. Di bola matanya ada refleksi seperti kompas — tapi bukan arah mata angin, melainkan panah ke 6 arah: kiri atas, kanan atas, kiri, kanan, kiri bawah, kanan bawah. Kayak detektif lagi baca pikiran.

Di bawah mata, teks: MATA LO BOCORIN ISI KEPALA LO.

Teks HOOK besar:
EYE ACCESSING CUES

Teks hook:
LO NANYA "TADI MALEM DI MANA" — DIA LIRIK KANAN ATAS. "DI RUMAH." MUNGKIN DIA LAGI NGARANG.

Desain bold misterius nusuk.""")

urls['slide2'] = generate("EC | Slide 2 - Peta Gerakan Mata", """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: Wajah karakter besar di tengah dengan 6 arah panah keluar dari mata:

KIRI ATAS (Visual Remembered): INGET GAMBAR — "Muka mantan lo kayak apa?" Mata ke kiri atas. Mengakses memori visual.

KANAN ATAS (Visual Constructed): NGARANG GAMBAR — "Bayangin kalo kucing lo warna pink." Mata ke kanan atas. Otak lagi bikin gambar baru.

KIRI (Auditory Remembered): INGET SUARA — "Suara nyokap lo gimana?" Mata ke kiri. Inget suara.

KANAN (Auditory Constructed): NGARANG SUARA — "Bayangin Doraemon ngomong pake suara Batman." Mata ke kanan. Ngarang suara.

KIRI BAWAH (Auditory Digital): DIALOG INTERNAL — "Lo ngomong apa ke diri lo pas mau tidur?" Mata kiri bawah. Lagi ngomong ke diri sendiri.

KANAN BAWAH (Kinesthetic): NGERASAIN — "Rasanya pasir di kaki gimana?" Mata kanan bawah. Akses perasaan.

CATATAN: Untuk orang KIDAL, arahnya bisa KEBALIK. Dan ini PATOKAN UMUM — bukan 100% akurat.

Desain infografis peta.""")

urls['slide3'] = generate("EC | Slide 3 - Kok Bisa Mata Bocorin?", """Instagram carousel slide 3:4 aspect ratio ukuran feed Instagram. Flat vector illustration style infografis.

Background gradasi soft cream ke deep teal blue.

Ilustrasi: Otak dibelah dua dengan label otak kiri dan kanan. Dari setiap bagian ada saraf yang nyambung ke mata.

Penjelasan sederhana:
Saat lo MENGINGAT gambar → otak lo mengakses VISUAL CORTEX. Gerakan mata adalah "efek samping" dari aktivasi neural itu. Kayak layar komputer yang berkedip pas processor lagi kerja keras.

Saat lo MENGARANG gambar → bagian yang sama aktif, tapi dari arah berbeda. Makanya mata gerak ke arah berbeda.

Ini bukan telepati. Ini NEUROLOGY.

Teks penjelasan: Mata lo bergerak secara otomatis sesuai sistem mana yang lagi lo akses: visual, auditori, atau kinestetik. Inget atau ngarang. Ini refleks — bukan pilihan sadar.

Desain infografis edukatif.""")

urls['slide4'] = generate("EC | Slide 4 - Contoh Deteksi Bohong", """Instagram carousel slide 3:4 aspect ratio ukuran feed Instagram. Flat vector illustration style komik.

Background gradasi soft cream ke deep teal blue.

Ilustrasi: 4 panel contoh "mata bocor":

Panel 1: PASANGAN — "Lo chat-an sama siapa tadi malem?" Dia: "Gak siapa-siapa." MATA KE KANAN ATAS (ngarang visual). Hmm.

Panel 2: INTERVIEW — "Bisa Excel?" Kandidat: "Bisa banget." MATA KE KANAN ATAS. Mungkin dia lagi bayangin apa itu Excel.

Panel 3: ANAK KECIL — "Siapa yang makan coklat?" Anak: "Bukan aku..." MATA KE KANAN ATAS. Ngarang alibi.

Panel 4: TEMEN — "Lo beneran oke?" Temen: "Iya, oke kok." MATA KE KIRI BAWAH (auditory digital — dialog internal). Dia lagi ngomong ke diri sendiri: "Gue gak oke." Dari mata keliatan.

Teks HEADLINE bold:
CONTOH MATA BOCOR DI KEHIDUPAN NYATA

Teks penutup:
Ini BUKAN detektor kebohongan 100%. Tapi pola ini ADA. Dan kalo lo perhatiin — lo mulai liat dunianya.

Desain komik lucu nusuk.""")

print("\n✅ EYE CUES BATCH 1-4 COMPLETE!")
print("\nURLs:", json.dumps(urls, indent=2))
