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

Background gradasi dari soft cream (#FFF8F0) ke deep teal blue (#1A5F7A). Nuansa dark humor.

Ilustrasi: karakter berdiri di tengah. Mulutnya TERSENYUM bilang IYA dengan balon kata besar berwarna cerah. Tapi di dalam kepalanya dilihat transparan ada karakter mini yang TERIAK dengan megaphone GAK MAU. Tangan karakter megang daftar panjang: Bantuin tugas dia centang, Dateng padahal males centang, Iyain pacar padahal kesel centang, Ngangguk pas boss salah centang.

Di bawah karakter seperti ada magnet atau tali yang narik dia itulah Yes Set.

Teks HOOK besar font bold di bagian atas:
THE YES SET

Teks hook lanjutan ukuran sama:
KENAPA LO IYA-IYA AJA PADAHAL GAK MAU?

Teks sub-heading di bawah:
Dia minta tolong. Lo bilang IYA. Padahal otak lo teriak GAK MAU. Ada apa dengan lo?

Desain bold striking dark humor font besar mudah terbaca.""")

urls['slide2'] = generate("Slide 2 - Apa Itu Yes Set", """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: Seorang penjual berdiri di kiri. Dia ngomong 3 pertanyaan berturut-turut:

Pertanyaan 1: Langit biru ya? karakter kanan: IYA kepala ngangguk.
Pertanyaan 2: Hari ini panas ya? karakter kanan: IYA kepala ngangguk lagi.
Pertanyaan 3: Nah mau beli gak? karakter kanan udah ngangguk duluan sebelum mikir.

Di bawah karakter kanan ada tulisan: OTAK LO UDAH DI-SET buat ngomong IYA. Momentum ngangguk udah terjadi.

Teks HEADLINE bold di atas:
APA ITU THE YES SET?

Teks definisi:
Yes Set adalah teknik NLP di mana seseorang bikin lo ngomong IYA dulu untuk hal-hal kecil yang gak mungkin lo tolak supaya lo otomatis IYA di hal besar yang SEBENARNYA pengen lo tolak.

Teks contoh:
Sales Langit biru ya? Lo IYA.
Sales Hari ini panas ya? Lo IYA.
Sales Nah beli ya? Lo IYA.

Desain infografis edukatif mind-blowing.""")

urls['slide3'] = generate("Slide 3 - Pacing", """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: Dua karakter berjalan di jalan yang sama. Karakter kanan si persuader jalan di depan. Karakter kiri lo jalan NGIKUTIN persis di belakang langkah yang sama kecepatan yang sama kayak bayangan.

Label di atas: PACING Ngekor dulu samain langkah.

3 contoh pacing:

Contoh 1: Karakter kanan duduk santai lo juga duduk santai. Label POSTUR Dia duduk lo duduk. Dia nyender lo nyender.

Contoh 2: Karakter kanan ngomong pelan Kita temenan udah lama ya. Lo Iya. Label KATA-KATA Dia pake kata yang pasti lo setujuin. Cari kesamaan.

Contoh 3: Karakter kanan napas pelan dan dalem lo juga ngikut napasnya tanpa sadar. Label ENERGI Dia rileks lo rileks.

Teks HEADLINE bold:
PASING 1: PACING NGEKOR DULU

Teks penutup:
Abis pacing berhasil lo gak ngerasa dia orang asing lagi. Lo ngerasa dia nyambung. Baru deh dia bisa ngarahin lo namanya Leading.

Desain infografis insightful.""")

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

Background gradasi soft cream ke deep teal blue.

Ilustrasi: Dua karakter masih berjalan tapi sekarang posisinya berubah. Karakter kanan si persuader udah mulai BELOK. Karakter kiri lo masih ngikutin BELOK JUGA tanpa sadar. Jalan yang tadinya lurus sekarang menikung.

Label: LEADING Lo udah ngekor. Sekarang dia yang ngarahin.

Contoh percakapan:
Pacing: Kita udah temenan lama ya. Lo: Iya.
Pacing: Lo tau gue selalu supportif. Lo: Iya.
Leading: Nah soal ngerjain tugas ini gue butuh bantuan lo banget. Lo: Iya.

Padahal dalem hati: Kenapa gue iya-in lagi?!

Teks HEADLINE bold:
PASING 2: LEADING MULAI NGARAHIN

Teks penjelasan:
Setelah pacing berhasil momentum iya udah jalan. Sekarang dia tinggal MASUKIN permintaannya. Otak lo udah di mode: KALO DIA NGOMONG GUE SETUJU.

Teks bold orange:
Bukan lo lemah. Otak lo cuma ngikutin momentum.

Desain komik insightful ngena.""")

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