import streamlit as st
import requests
from requests.structures import CaseInsensitiveDict

import json

query_url = "https://api.openai.com/v1/images/generations"

st.title("DALL-E 2 API Image Generation Demo")

st.write("Enter a prompt to generate an image")

prompt = st.text_area("Prompt", "A cat riding a bike")

model = st.selectbox(
    "Select a DALL-E 2 model",
    ["image-alpha-001", ""]
)

num_images = st.slider("Number of images to generate", min_value=1, max_value=10, value=1)

headers = CaseInsensitiveDict()
headers["Content-Type"] = "application/json"
api_key = "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"
headers["Authorization"] = f"Bearer {api_key}"

data = """
{
    """
data += f'"model": "{model}",'
data += f'"prompt": "{prompt}",'
data += f'"num_images": {num_images}'
data += """
}
"""

def generate_images():
    resp = requests.post(query_url, headers=headers, data=data)

    if resp.status_code != 200:
        raise ValueError("Failed to generate image "+resp.text)

    response_text = json.loads(resp.text)
    return response_text['data']

if st.button("Generate Images"):
    with st.spinner("Generating images..."):
        image_data = generate_images()
        for idx, image in enumerate(image_data):
            st.image(image['url'], caption=f"Image {idx+1}", width=400)