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['slide5'] = generate("MM | Slide 5 - Meta Model Kebalikannya", """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: Split screen dua sisi.

SISI KIRI (Milton Model — kabut ungu misterius): Ada sosok bicara samar. Di bawahnya ada toolbox: "Kamu mungkin..." "Beberapa orang..." "Semakin... semakin..." "Dan kamu bisa bertanya-tanya..." Semua tools bahasa yang VAGUE. Fungsi: bikin otak ISI SENDIRI. Digunakan untuk hypnosis, trance, relaksasi.

SISI KANAN (Meta Model — sinar terang oranye): Ada detektif dengan kaca pembesar. Toolbox: "Siapa?" "Kapan?" "Apa tepatnya?" "Bagaimana spesifiknya?" Semua tools yang SPESIFIK. Fungsi: bikin otak KLARIFIKASI. Digunakan untuk sadar, problem solving.

Di tengah: PANAH DUA ARAH. Lo butuh DUA-DUANYA.

Teks HEADLINE bold:
MILTON MODEL vs META MODEL: DUA SISI MATA UANG

Teks penjelasan:
Meta Model buat LO SADAR — bongkar distorsi di pikiran lo. Milton Model buat LO PENGARUH — bantu orang masuk ke kondisi rileks dan terbuka. Dua-duanya tools.

Teks penutup:
Jago NLP pinter dua-duanya. Tau kapan SPESIFIK. Tau kapan SAMAR.

Desain infografis clear.""")

urls['slide6'] = generate("MM | Slide 6 - Sadar Kalo Lo Lagi Kena", """Instagram carousel slide 3:4 aspect ratio ukuran feed Instagram. Flat vector illustration style komik.

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

Ilustrasi: Karakter duduk scroll HP. Di HP-nya ada konten-konten yang pake Milton Model: quote bijak yang gak jelas, "tanda-tanda alam semesta," motivator yang ngomong "kamu spesial."

Tiba-tiba lampu di kepalanya NYALA. Dia sadar: OH. INI MILTON MODEL. GUE LAGI DI-ISI.

Dari HP, muncul balon-balon teks Milton Model. Tapi sekarang dia udah bisa LIHAT semua kalimat itu dan nanya balik ke dirinya sendiri:

Kalimat: "Kamu lebih kuat dari yang kamu kira." → Dia: "Lebih kuat dari APA? Seberapa kuat? Buktinya?"

Dia gak nolak kalimatnya. Dia cuma SADAR. Dan dari sadar itu, dia bisa PILIH: mau percaya apa enggak.

Teks HEADLINE bold:
CARA SADAR KALO LO LAGI KENA MILTON MODEL

Teks penjelasan:
Gak perlu paranoid. Cukup SADAR. Kalo ada yang ngomong SAMAR dan lo langsung ngerasa "ini gue banget" — pause. Tanya: APA spesifiknya? SIAPA? KAPAN? BUKTINYA?

Teks penutup:
Milton Model bukan jahat. Lo cukup tau kapan lo DI-ISI dan kapan lo ISI SENDIRI.

Desain komik empowering.""")

urls['slide7'] = generate("MM | Slide 7 - Closing", """Instagram carousel closing slide 3:4 aspect ratio ukuran feed Instagram. Flat vector illustration style hangat.

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

Ilustrasi: Karakter berdiri di perpustakaan dengan dua buku di tangan. Buku kiri: THE MILTON MODEL — sampul kabut ungu. Buku kanan: THE META MODEL — sampul sinar oranye. Dia megang dua-duanya, tersenyum. Karena dia udah ngerti: dua tools ini komplit.

Di belakangnya ada rak buku: BAHASA LO ADALAH ALAT. BUKAN TUAN LO.

Teks HEADLINE besar font bold:
KATA-KATA PUNYA KEKUASAAN. SEKARANG LO TAU.

Teks body medium:
Milton Model bikin lo sadar: kalimat SAMAR bisa ngehipnotis lo. Tapi juga bisa lo PAKE buat bantu orang lain rileks dan terbuka. Meta Model bikin lo sadar: kalimat SPESIFIK bisa ngebebasin lo dari kebingungan.

Teks hook:
Lo sekarang punya DUA tools. Satu buat nyadar. Satu buat ngarahin.

Teks closing:
Pake dengan bijak. ikon tanaman

Teks CTA pojok bawah:
Follow balimentari

Teks kecil di atas CTA:
Tag temen yang suka quote bijak tapi gak jelas 😬

Desain closing empowering wise.""")

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