from openai import OpenAI
from dotenv import load_dotenv
import requests
import os
from PIL import Image
from io import BytesIO

load_dotenv()

client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'))

def chatCompletion(system_msg, user_msg):
    try:
        completion = client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "system", "content": system_msg},
                {"role": "user", "content": user_msg}
            ])
        return completion.choices[0].message.content
    except Exception as e:
        print(f"Ocurrió un error inesperado: {e}")
        return None

def generate_dalle_images(prompt, n=1, size="1024x1024"):
    try:
        # Realizar la solicitud para generar imágenes
        response = client.images.generate(
            model="dall-e-3",
            prompt=prompt,
            n=n,
            size=size
        )

        # Extraer las URL de las imágenes generadas de la respuesta
        #image_urls = [item.get("url") for item in response.get("data", [])]
        image_urls = [item.url for item in response.data]

        return image_urls
    except Exception as e:
        # Manejar cualquier error que ocurra durante la solicitud
        print(f"Error al generar imágenes: {e}")
        return None
    
def createImageVariation(image_path, n=2, size="1024x1024"):
    try:
        download_image(image_path, "prueba1.jpg")
        response = client.images.create_variation(
            image=open("prueba1.jpg", "rb"),
            n=n,
            size=size
        )
        # Obtener las URLs de las variaciones de imagen
        urls = [data.url for data in response.data]
        
        return urls
    except Exception as e:
        print(f"Ocurrió un error inesperado: {e}")
        return None

def obtener_contenido_imagen(prompt,image_url):
    try: 
        response = client.chat.completions.create(
            model="gpt-4-turbo",
            messages=[
                {
                    "role": "user",
                    "content": [
                        {"type": "text", "text": prompt},
                        {"type": "image_url", "image_url": {"url": image_url}},
                    ],
                }
            ],
        )
        
        return response.choices[0].message.content
    except Exception as e:
        print(f"Ocurrió un error inesperado: {e}")
        return None

def is_valid_url(url):
    # Verificar si la URL comienza con "http://" o "https://"
    return url.startswith("http://") or url.startswith("https://")

def download_image(url, filename):
    # Realizar la solicitud para descargar la imagen
    response = requests.get(url)

    if response.status_code == 200:
        # Guardar la imagen en el archivo especificado
        with open(filename, 'wb') as file:
            file.write(response.content)
        print(f"Imagen descargada exitosamente como {filename}")
    else:
        print(f"No se pudo descargar la imagen. Código de estado: {response.status_code}")
