# server_to_server_incremental_unificado.py
import requests
from datetime import datetime, timedelta
import csv
import os

# Configuración
BASE_URL = "http://127.0.0.1:5003/backtestingIdea/get_backtesting_idea"
desde_str = "2025-02-04"
hasta_str = "2025-05-04"

symbol = "SPX"
estrategia = "Vertical"
risk = "Intermedio"
hora_fija = "10:40"

# Convertir fechas
desde = datetime.strptime(desde_str, "%Y-%m-%d")
hasta_final = datetime.strptime(hasta_str, "%Y-%m-%d")

# Archivo único de resultados
output_file = "resultados_backtesting_incremental.csv"
existe_archivo = os.path.exists(output_file)

# Función para saber si es día hábil
def es_dia_habil(fecha):
    return fecha.weekday() < 5  # lunes a viernes

# Inicializar archivo CSV
with open(output_file, "a", newline="") as csvfile:
    fieldnames = ["desde", "hasta", "hora", "profit", "wins", "losses", "winrate"]
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    if not existe_archivo:
        writer.writeheader()

    current_hasta = desde
    while current_hasta <= hasta_final:
        if not es_dia_habil(current_hasta):
            current_hasta += timedelta(days=1)
            continue

        hasta_str_actual = current_hasta.strftime("%Y-%m-%d")
        hora_str = datetime.strptime(hora_fija, "%H:%M").strftime("%H%M")

        params = {
            "desde": desde_str,
            "hasta": hasta_str_actual,
            "symbol": symbol,
            "estrategia": estrategia,
            "hora": hora_str,
            "risk": risk
        }

        print(f"📆 Analizando hasta {hasta_str_actual}...")

        try:
            response = requests.get(BASE_URL, params=params)
            response.raise_for_status()
            data = response.json()

            profit = data.get("profit_total", 0)
            wins = data.get("wins", 0)
            losses = data.get("losses", 0)
            total = wins + losses
            winrate = round((wins / total) * 100, 2) if total > 0 else 0

            writer.writerow({
                "desde": desde_str,
                "hasta": hasta_str_actual,
                "hora": hora_str,
                "profit": profit,
                "wins": wins,
                "losses": losses,
                "winrate": winrate
            })

            print(f"   ➜ Profit: {profit} | Wins: {wins} | Losses: {losses} | Winrate: {winrate}%\n")

        except Exception as e:
            print(f"[ERROR] Falló el análisis hasta {hasta_str_actual}: {e}\n")

        current_hasta += timedelta(days=1)

print("\n✅ Proceso finalizado. Resultados guardados en un solo archivo.\n")
