from agno.agent import Agent
from agno.models.openai import OpenAIChat

# Prefect imports #######################################

from prefect import task, flow
from prefect.logging import get_run_logger
from prefect.filesystems import LocalFileSystem

local_file_system_block = LocalFileSystem.load("localfile")

# Cargar variables de entorno ###########################

import os
from dotenv import load_dotenv

load_dotenv()

openai_api_key = os.getenv("OPENAI_API_KEY")


prefect_logger = get_run_logger()

# Definir tareas ###############################################

@task(name="Inicializar agente financiero", log_prints=True)
def inicializar_agente_financiero():
    prefect_logger.debug(f"Inicializando el agente financiero")
    # Aquí se podría agregar la lógica para inicializar el agente
    return "Agente financiero inicializado"


@task(name="Analizar datos financieros", log_prints=True)
def analizar_datos_financieros(datos: str):

    prefect_logger = get_run_logger()
    
    prefect_logger.debug(f"Creando el agente con OpenAI")

    prefect_logger.debug(f"analizando los datos: {datos}")

    # Crear el agente
    agente = Agent(
        model=OpenAIChat(id="gpt-4o-mini", api_key=openai_api_key),
        name="analista_financiero",
        description="Agente especializado en análisis financiero y económico"
    )

    prefect_logger.debug(f"Ejecutando el agente")

    respuesta = agente.run("Da un resumen corto financiero de los siguientes datos: " + datos)

    prefect_logger.info(f"Respuesta del agente: {respuesta.content}")

    return respuesta.content


# Definir el flujo principal #########################################

@flow(name="Flujo financiero", result_storage=local_file_system_block, log_prints=True)  # type: ignore
def flujo_principal():
    datos_ejemplo = "La bolsa de valores de Nueva York cerró al alza hoy, con el índice S&P 500 subiendo un 1.2% impulsado por ganancias en el sector tecnológico. Las acciones de Apple y Microsoft lideraron las ganancias, mientras que los mercados europeos también mostraron signos de recuperación tras datos económicos positivos."

    agente_inicializado = inicializar_agente_financiero.submit().result()


    resultado_analisis = analizar_datos_financieros.submit(datos_ejemplo).result()

    return resultado_analisis


# Ejecutar el flujo principal #############################


if __name__ == "__main__":
    flujo_principal()