import pandas as pd
import time
PATH_UBUNTU = "/var/www/html/flask_project/bola8/profits/"

# Cargar el archivo CSV
file_path = PATH_UBUNTU + 'profit 20250123.csv'
data = pd.read_csv(file_path)
# Filtrar solo las filas donde 'Hour' tiene el formato correcto de hora


def is_time_format(value):
    try:
        pd.to_datetime(value, format='%H:%M')
        return True
    except ValueError:
        return False


data = data[data['Hour'].apply(is_time_format)]
# Convertir 'Hour' a datetime para facilitar la manipulación de intervalos
data['Hour'] = pd.to_datetime(data['Hour'], format='%H:%M').dt.time

# Crear una lista de intervalos de tiempo de 5 minutos
intervals = pd.date_range("09:35:00", "15:59:59", freq="5min")

# Función para asignar intervalos de tiempo


def get_interval(time):
    for start, end in zip(intervals[:-1], intervals[1:]):
        if start.time() <= time < end.time():  # Note the use of < for the end time
            return f"{start.time()}-{(end - pd.Timedelta(seconds=1)).time()}"
    return None


# Asignar intervalos de tiempo a cada fila
data['Interval'] = data['Hour'].apply(get_interval)

# Función para verificar el valor en 'Raw' para una lista dada


def check_raw(entries, data):
    results = []
    for entry in entries:

        symbol, type_, start_time = entry
        start_time = pd.to_datetime(start_time, format='%H:%M:%S').time()
        end_time = (pd.to_datetime(start_time.strftime('%H:%M:%S')) + pd.Timedelta(minutes=4, seconds=59)).time()
        interval = f"{start_time}-{end_time}"
        filtered_data = data[(data['Symbol'] == symbol) & (data['Name'] == type_) & (data['Interval'] == interval)]

        if not filtered_data.empty:
            raw_value = filtered_data['Raw'].iloc[0]
            results.append(entry + [interval, raw_value])
    return results


entries = [
    ["NDX", "Vertical", "10:30:00"],
    ["NDX", "Vertical", "10:35:00"],
    ["NDX", "Vertical", "10:25:00"],
    ["NDX", "Vertical", "10:45:00"],
    ["NDX", "Vertical", "10:20:00"],

    ["RUT", "Sonar", "14:10:00"],
    ["RUT", "Sonar", "14:15:00"],
    ["RUT", "Sonar", "14:30:00"],
    ["RUT", "Sonar", "14:00:00"],
    ["RUT", "Sonar", "10:35:00"],

    ["SPX", "Vertical", "10:40:00"],
    ["SPX", "Vertical", "10:45:00"],
    ["SPX", "Vertical", "10:30:00"],
    ["SPX", "Vertical", "10:35:00"],
    ["SPX", "Vertical", "10:50:00"],

    ["SPX", "Vertical", "13:25:00"],
    ["SPX", "Vertical", "13:45:00"],
    ["SPX", "Vertical", "13:40:00"],
    ["SPX", "Vertical", "12:55:00"],
    ["SPX", "Vertical", "13:55:00"],

    ["SPX", "Butterfly", "14:40:00"],
    ["SPX", "Butterfly", "13:30:00"],
    ["SPX", "Butterfly", "14:45:00"],
    ["SPX", "Butterfly", "13:35:00"],
    ["SPX", "Butterfly", "14:35:00"],

    ["SPX", "Sonar", "14:20:00"],
    ["SPX", "Sonar", "14:30:00"],
    ["SPX", "Sonar", "14:35:00"],
    ["SPX", "Sonar", "12:55:00"],
    ["SPX", "Sonar", "14:10:00"],

    ["XSP", "Vertical", "10:35:00"],
    ["XSP", "Vertical", "13:45:00"],
    ["XSP", "Vertical", "10:45:00"],
    ["XSP", "Vertical", "10:40:00"],
    ["XSP", "Vertical", "13:20:00"],

    ["XSP", "Butterfly", "10:00:00"],
    ["XSP", "Butterfly", "10:05:00"],
    ["XSP", "Butterfly", "10:50:00"],
    ["XSP", "Butterfly", "11:45:00"],
    ["XSP", "Butterfly", "10:20:00"],

    ["QQQ", "Vertical", "10:35:00"],
    ["QQQ", "Vertical", "10:30:00"],
    ["QQQ", "Vertical", "10:45:00"],
    ["QQQ", "Vertical", "10:40:00"],
    ["QQQ", "Vertical", "10:25:00"],

    ["QQQ", "Butterfly", "14:05:00"],
    ["QQQ", "Butterfly", "14:10:00"],
    ["QQQ", "Butterfly", "13:40:00"],
    ["QQQ", "Butterfly", "13:50:00"],
    ["QQQ", "Butterfly", "13:35:00"],

    ["SPY", "Butterfly", "10:15:00"],
    ["SPY", "Butterfly", "10:30:00"],
    ["SPY", "Butterfly", "10:10:00"],
    ["SPY", "Butterfly", "10:20:00"],
    ["SPY", "Butterfly", "14:40:00"],

]

# Verificar el valor en 'Raw' para las entradas proporcionadas
raw_entries = check_raw(entries, data)

# # Mostrar los resultados en formato tabular
# results_df = pd.DataFrame(raw_entries, columns=["Symbol", "Type", "Start Time", "Interval", "Raw Value"])
# print(results_df)

# Filtrar los resultados para mostrar solo los valores negativos de 'Raw'
negative_raw_entries = [entry for entry in raw_entries if entry[-1] < 0]

# Mostrar los resultados en formato tabular
results_df = pd.DataFrame(negative_raw_entries, columns=["Symbol", "Type", "Start Time", "Interval", "Raw Value"])
print(results_df)
