# tasks_backtestingidea2.py
from celery_app import celery_app  # usa tu Celery app existente

# IMPORTANTE: NO importes backtestingIdea2 (ni el blueprint) aquí.
# Solo importa funciones "de cálculo" (las que ya existen) desde donde estén.
# Si hoy tus funciones están dentro de backtestingIdea2.py, me lo dices y lo acomodamos.
from backtestingIdea import (  # <- AJUSTA si tus funciones viven en otro archivo
    calcular_precios_verticales,
    calcular_precios_iron_condor,
    PATH_UBUNTU_CHAINS
)

import os
import pandas as pd


@celery_app.task(bind=True, queue="backtesting_idea2")
def run_backtesting_idea2(self, symbol, estrategia, timeHour, risk, desde, hasta):
    # Normalizar para archivo (case-sensitive)
    estr_up = (estrategia or "").upper()
    if estr_up == "VERTICAL":
        estrategia_file = "Vertical"
    elif estr_up == "IRONCONDOR":
        estrategia_file = "IronCondor"
    else:
        raise ValueError("Estrategia no reconocida")

    archivo = f"/var/www/html/backtestingmarket/predictor_data/makekos/{symbol}/{symbol}_{estrategia_file}_strikes_{timeHour}.csv"
    if not os.path.exists(archivo):
        raise FileNotFoundError(f"Archivo de strikes no encontrado: {archivo}")

    df_strikes = pd.read_csv(archivo)

    # Mapeo desplazamientos igual que en prod
    if symbol in ["SPX", "RUT"]:
        desplazamientos = {'conservador': 0, 'intermedio': -5, 'agresivo': -10, 'ultra_agresivo': -15}
    else:
        desplazamientos = {'conservador': 0, 'intermedio': -1, 'agresivo': -2, 'ultra_agresivo': -3}
    desplazamiento = desplazamientos.get(risk, -5)

    if estr_up == "VERTICAL":
        df_result, total, wins, losses = calcular_precios_verticales(
            df_strikes, PATH_UBUNTU_CHAINS, desplazamiento, desde, hasta
        )
    else:
        df_result, total, wins, losses = calcular_precios_iron_condor(
            df_strikes, PATH_UBUNTU_CHAINS, desplazamiento, desde, hasta
        )

    return {
        "data": df_result.astype(object).to_dict(orient="records"),
        "profit_total": float(round(total, 2)),
        "wins": int(wins),
        "losses": int(losses),
    }
