import openai
import base64
import dotenv
import os
import cv2
from src.utils.logger_config import logger

# === CONFIGURA TU API KEY ===
dotenv.load_dotenv()
openai.api_key = os.getenv('APIKEY_FACERECOG')

# === CODIFICA TU IMAGEN ===
# === Función para convertir frame a base64 ===
def frame_to_base64(frame):
    _, buffer = cv2.imencode('.jpg', frame)
    return base64.b64encode(buffer).decode('utf-8')


# === Función que llama a GPT-4o con los dos frames ===
def analizar_frames_con_openai(frame1, frame2):
    b64_frame1 = frame_to_base64(frame1)
    b64_frame2 = frame_to_base64(frame2)

    prompt_text = (
        "Analiza detalladamente las siguientes imágenes para determinar si contienen únicamente el rostro de una persona real, "
        "sin presencia de objetos ajenos como celulares, tazas, mouse, pantallas, manos cubriendo el rostro o imágenes falsas. "
        "Este análisis es crucial para una verificación biométrica confiable.\n\n"
        "Tu tarea es:\n"
        "1. Verificar que se trata de una persona real, no una imagen, muñeco, animal, pantalla, pintura o arte digital.\n"
        "2. Confirmar que el rostro está completamente visible y no está cubierto con manos, objetos o filtros.\n"
        "3. Verificar que NO se están usando accesorios que dificulten la verificación como lentes, gorros o auriculares.\n"
        "4. Marcar la detección de vida si notas señales típicas (ojos abiertos, expresión natural, etc.).\n"
        "5. Detectar si hay objetos ajenos en el encuadre (celulares, mouse, tazas, cables, pantallas, etc.) — si hay, marca como no válido.\n\n"
        "Devuelve únicamente este JSON (sin explicaciones ni texto adicional), con todas las claves entre comillas dobles y los valores correctos:\n"
        "{\n"
        '  "es_persona": true,\n'
        '  "usa_lentes": false,\n'
        '  "usa_auriculares": false,\n'
        '  "usa_gorro": false,\n'
        '  "vida_detectada": true,\n'
        '  "accesorios": false,\n'
        '  "objetos_ajenos_detectados": false\n'
        "}\n"
    )



    response = openai.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {
                "role": "user",
                "content": [
                    {"type": "text", "text": prompt_text},
                    {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64_frame1}"}},
                    {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64_frame2}"}}
                ]
            }
        ],
        max_tokens=300
    )
    logger.info("data",response)
    return response.choices[0].message.content

def analizar_frames_con_openai_uno(frame1):
    b64_frame1 = frame_to_base64(frame1)

    prompt_text = (
        "Analiza la siguiente imagen del rostro de una persona y determina si se trata de una persona real. "
        "También identifica si la persona está usando lentes, auriculares, gorros, sombreros u otro accesorio "
        "que pueda interferir con una verificación biométrica. Además, indica si los ojos de la persona son visibles claramente "
        "y si se encuentran abiertos.\n\n"
        "Devuelve únicamente este JSON (sin explicaciones ni texto adicional), con todas las claves entre comillas dobles y los valores en el formato correcto:\n"
        '{\n'
        '  "es_persona": true,\n'
        '  "usa_lentes": false,\n'
        '  "usa_auriculares": false,\n'
        '  "usa_gorro": false,\n'
        '  "vida_detectada": true,\n'
        '  "ojos_detectados": true,\n'
        '  "accesorios": false\n'
        '}\n'
    )

    response = openai.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {
                "role": "user",
                "content": [
                    {"type": "text", "text": prompt_text},
                    {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64_frame1}"}}
                ]
            }
        ],
        max_tokens=300
    )
    logger.info("data",response)
    return response.choices[0].message.content


def analizar_frames_con_openai_varios(frame1,frame2, frame3):
    b64_frame1 = frame_to_base64(frame1)
    b64_frame2 = frame_to_base64(frame2)
    b64_frame3 = frame_to_base64(frame3)
    prompt_text = (
        "Analiza las siguientes imágenes del rostro de una persona y determina si se trata de una persona real. "
        "También identifica si la persona está usando lentes, auriculares, gorros, sombreros u otro accesorio "
        "que pueda interferir con una verificación biométrica. Además, indica si los ojos de la persona son visibles claramente "
        "y si se encuentran abiertos.\n\n"
        "Devuelve únicamente este JSON (sin explicaciones ni texto adicional), con todas las claves entre comillas dobles y los valores en el formato correcto:\n"
        '{\n'
        '  "es_persona": true,\n'
        '  "usa_lentes": false,\n'
        '  "usa_auriculares": false,\n'
        '  "usa_gorro": false,\n'
        '  "vida_detectada": true,\n'
        '  "ojos_detectados": true,\n'
        '  "accesorios": false\n'
        '}\n'
    )

    response = openai.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {
                "role": "user",
                "content": [
                    {"type": "text", "text": prompt_text},
                    {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64_frame1}"}},
                    {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64_frame2}"}},
                    {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64_frame3}"}}
                ]
            }
        ],
        max_tokens=300
    )

    logger.info("Respuesta OpenAI:", response)
    return response.choices[0].message.content
