# services/backtesting_service.py
import os
import pandas as pd
from backtestingIdeaV2 import (  # importa desde tu módulo actual
    calcular_precios_verticales,
    calcular_precios_iron_condor,
    PATH_UBUNTU_CHAINS,
)

def run_backtesting(symbol: str, estrategia: str, timeHour: str, risk: str, desde: str, hasta: str):
    """
    Ejecuta el cálculo y devuelve EXACTAMENTE la estructura JSON que hoy espera tu cliente.
    No toca el contrato.
    """
    risk = risk.lower()
    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[risk]

    archivo = f"/var/www/html/backtestingmarket/predictor_data/makekos/{symbol}/{symbol}_{estrategia}_strikes_{timeHour}.csv"
    if not os.path.exists(archivo):
        # mantenemos el mismo error handling que hoy
        return {
            'error': 'Archivo de strikes no encontrado',
            'status_code': 404
        }

    df_strikes = pd.read_csv(archivo)

    if estrategia.upper() == "VERTICAL":
        df_result, total, wins, losses = calcular_precios_verticales(
            df_strikes, PATH_UBUNTU_CHAINS, desplazamiento, desde, hasta
        )
    elif estrategia.upper() == "IRONCONDOR":
        df_result, total, wins, losses = calcular_precios_iron_condor(
            df_strikes, PATH_UBUNTU_CHAINS, desplazamiento, desde, hasta
        )
    else:
        return {
            'error': 'Estrategia no reconocida',
            'status_code': 400
        }

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