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("MM | 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-mindblowing.

Ilustrasi: Karakter duduk di depan sosok bijak (bisa guru spiritual, motivator, atau konten kreator). Dari mulut sosok itu keluar kata-kata yang KOSONG tapi indah: "Semua akan indah pada waktunya." "Alam semesta sedang bekerja untukmu." "Yang terbaik akan datang." Karakter MENGANGGUK dalam — ngerasa "ini ngomongin gue banget."

Padahal di balik kata-kata itu, ada label: KALIMAT KOSONG. Tapi otak karakter udah ISI SENDIRI.

Di bawah: Kok lo percaya sama orang bijak yang ngomong gak jelas?

Teks HOOK besar:
THE MILTON MODEL

Teks hook lanjutan:
LO PERCAYA SAMA ORANG BIJAK YANG NGOMONG GAK JELAS. KOK BISA?

Desain bold misterius mind-blowing.""")

urls['slide2'] = generate("MM | Slide 2 - Apa Itu Milton 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: Dua sisi.

SISI KIRI — META MODEL (ikon kaca pembesar + mikroskop): Spesifik. Detail. "Apa maksudmu?" "Siapa?" "Kapan tepatnya?" Otak dipaksa KLARIFIKASI. Ini buat nyadar, problem solving.

SISI KANAN — MILTON MODEL (ikon kabut lembut + mimpi): Artfully vague. "Kamu mungkin mulai menyadari... sesuatu yang dalam..." "Mungkin sekarang... atau nanti..." Otak ISI SENDIRI. Ini buat hypnosis, trance, persuasi.

Di tengah: DUA SISI MATA UANG YANG SAMA. Meta Model = kebalikannya Milton Model.

Teks HEADLINE bold:
MILTON MODEL: SENI BAHASA YANG ART-FULLY VAGUE

Teks definisi:
Namanya dari Milton Erickson — bapak hipnoterapi modern. Dia sadar: kalo lo ngomong SPESIFIK, otak orang KOREKSI. Tapi kalo lo ngomong SAMAR — otak orang ISI SENDIRI. Dan yang lo isi sendiri, lo percaya 100%.

Desain infografis edukatif.""")

urls['slide3'] = generate("MM | Slide 3 - Kalimat Kosong Yang Bikin Percaya", """Instagram carousel slide 3:4 aspect ratio ukuran feed Instagram. Flat vector illustration style komik.

Background gradasi soft cream ke deep teal blue.

Ilustrasi: 5 contoh kalimat "kosong" yang sering lo denger — dan kenapa lo percaya:

Contoh 1: "Semua akan indah pada waktunya." → KAPAN? APA yang indah? Gak jelas. Otak lo: "Oh iya... yang gue sedihin sekarang nanti indah." LO YANG ISI.

Contoh 2: "Kamu lebih kuat dari yang kamu kira." → LEBIH KUAT dari apa? Seberapa kuat? Otak lo: "Iya ya... gue emang kuat." LO YANG ISI.

Contoh 3: "Alam semesta punya rencana." → RENCANA APA? BUKTI di mana? Otak lo: "Oh masalah gue sekarang bagian dari rencana." LO YANG ISI.

Contoh 4: "Kamu mungkin mulai menyadari... perubahan kecil dalam dirimu." → KAPAN? PERUBAHAN apa? Otak lo langsung NGERASAIN perubahan.

Contoh 5: "Beberapa orang... di ruangan ini... sedang merasa..." → SIAPA? MERASA apa? Otak lo: "GUE!"

Teks penutup: SEMUA KALIMAT ITU KOSONG. LO YANG ISI. MAKANYA LO PERCAYA.

Desain komik mind-blowing.""")

urls['slide4'] = generate("MM | Slide 4 - Dipake Siapa Aja", """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 karakter yang pake Milton Model:

Karakter 1 (ikon love): MANTAN — "Kita butuh waktu untuk bertumbuh masing-masing." Lo: "Oh dia sayang gue." Padahal artinya: putus. Milton Model bikin keputusan keras kerasa puitis.

Karakter 2 (ikon microphone): MOTIVATOR — "Kamu diciptakan untuk hal yang besar!" Lo: "Gue emang spesial!" BIG itu apa? KAPAN? GIMANA? Gak ada yang jelas. Lo isi sendiri.

Karakter 3 (ikon HP): KONTEN KREATOR — "Tanda-tanda alam semesta sedang membimbingmu." Lo: "Kok relate banget!" Karena saking umumnya — semua orang ngerasa relate.

Karakter 4 (ikon kursi terapi): HIPNOTERAPIS — "Dan saat kamu duduk di sini... kamu mungkin mulai merasakan... kenyamanan yang semakin dalam..." Lo: (mulai rileks beneran).

Teks HEADLINE bold:
SIAPA AJA YANG PAKE MILTON MODEL? SEMUA ORANG.

Desain komik insight ngena.""")

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