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 playful tapi mind-blowing.

Ilustrasi: Dua karakter berdiri berhadapan dengan satu garis terputus di antara mereka. Karakter kiri megang megaphone, di megaphone keluar tulisan "JANGAN LAMA-LAMA!" — huruf besar dan jelas. Tapi pas suara itu nyampe ke karakter kanan, kata-katanya berubah jadi "KAMU NYEBELIN!" — seperti melalui filter/prisma yang memecah cahaya. Di antara mereka ada 3 kaca/filter bengkok berlabel: "DELETION", "DISTORTION", "GENERALIZATION."

Karakter kanan menatap karakter kiri dengan ekspresi tersinggung. Karakter kiri bingung: "Lah? Gue cuma bilang jangan lama-lama."

Teks HOOK besar font bold di bagian atas:
"META MODEL NLP"

Teks hook lanjutan ukuran sama:
"KAMU NGOMONG A, DIA DENGER B"

Teks sub-heading di bawah:
"Bukan salah dia. Tapi otaknya punya 3 filter yang ngerubah kata-katamu."

Desain bold striking playful, font besar mudah terbaca.""")

urls['slide2'] = generate("Slide 2 - Apa Itu Meta Model", """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: sebuah otak yang dibelah jadi 3 bagian — seperti pabrik dengan 3 mesin filter. Input dari kiri: kata-kata asli yang masuk. Output dari kanan: kata-kata yang udah diproses (berbeda).

3 filter besar:

Filter 1 (ikon gunting potong): DELETION — Otak MENGHAPUS sebagian informasi. Otak gak bisa proses semuanya sekaligus, jadi dia pilih-pilih. Yang dihapus? Biasanya yang GAK SESUAI sama keyakinan.

Filter 2 (ikon kaca bengkok): DISTORTION — Otak MENGUBAH makna. Kayak kaca pembesar — sesuatu yang kecil jadi kelihatan besar. Sesuatu yang netral jadi kelihatan menyerang.

Filter 3 (ikon cap stempel): GENERALIZATION — Otak MEMBUAT ATURAN UMUM dari satu kejadian. Sekali disakiti cowok → "semua cowok sama aja." Sekali bos marah → "gue selalu gagal."

Teks HEADLINE bold di atas:
"APA ITU META MODEL NLP?"

Teks definisi:
"Meta Model adalah peta yang nunjukin bagaimana otakmu MEMFILTER kata-kata — sebelum kamu 'ngerti.'"

Teks penjelasan:
"Otak gak menerima informasi mentah. Dia punya 3 filter: Deletion (ngapus), Distortion (ngubah), Generalization (nyamaratain)."

Teks bold orange:
"Hasilnya? Kamu gak pernah denger apa yang SEBENARNYA diomongin. Kamu denger apa yang FILTERMU izinin."

Desain infografis edukatif mind-blowing.""")

urls['slide3'] = generate("Slide 3 - Deletion", """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 suami pulang kerja, bilang ke istri: "Hari ini meeting 3 jam, klien rewel, macet 2 jam, tapi akhirnya deal juga! Aku capek tapi seneng." Panjang.

Sampai ke telinga istri, lewat filter DELETION — yang nyampe cuma: "Aku capek." Sisanya? DIHAPUS. Di gelembung pikiran istri: "Dia capek. Berarti dia gak mau ngobrol sama aku. Berarti dia gak mau quality time." — padahal suami cuma cerita harinya.

Visual: gunting besar memotong kata-kata yang lain, menyisakan "capek" doang.

Teks HEADLINE di atas:
"FILTER 1: DELETION (PENGHAPUSAN)"

Teks penjelasan:
"Otak memilih informasi mana yang 'penting' — dan menghapus sisanya. Masalahnya... yang dihapus biasanya KONTEKS."

Teks contoh:
"Suami: 'Meeting 3 jam, klien rewel, macet, TAPI deal juga. Capek tapi seneng!'"
"Istri (lewat filter deletion): 'Dia capek. Aku jadi beban.'"

Teks penutup:
"Yang dihapus: 'seneng', 'deal juga', cerita positif. Yang diinget: 'capek.'"

Desain infografis relatable, ngena.""")

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

Background gradasi soft cream ke deep teal blue.

Ilustrasi: karakter cewek lagi cerita ke cowok: "Tadi siang aku liat kamu ngobrol sama cewek itu. Siapa dia?"

Cowok jawab santai: "Oh, itu temen SMP. Udah lama gak ketemu. Dia cuma nanya kabar."

Tapi di filter DISTORTION cewek, kata-kata itu lewat kaca pembesar yang BENGKOK. "Temen SMP" berubah jadi "MANTAN?" — "cuma nanya kabar" berubah jadi "DIAM-DIAM CHAT?" — "udah lama gak ketemu" berubah jadi "SERING KETEMU DIAM-DIAM?"

Gelembung pikiran cewek: "DIA BOHONG. ADA APA-APA."

Visual: kaca pembesar yang membengkokkan kata-kata netral menjadi mengancam.

Teks HEADLINE di atas:
"FILTER 2: DISTORTION (PEMBENGKOKAN MAKNA)"

Teks penjelasan:
"Otak mengubah makna — bikin yang netral jadi menyerang. Yang kecil jadi besar."

Teks contoh:
"Dia: 'Temen SMP doang.'"
"Kamu: 'Temen SMP = mantan.' → distortion."

Teks penutup:
"Mirip kayak kaca pembesar. Yang tadinya semut... jadi gajah."

Desain komik relatable eye-opening.""")

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