import gradio as gr
import joblib
import pandas as pd

# Carregar o modelo
model_LayAway = joblib.load('model_class_layaway_0.pkl')
model_LayHome = joblib.load('model_class_layhome_1.pkl')

def converter_para_float(valor):
    # Substitui vírgula por ponto e converte para float
    return float(valor.replace(',', '.'))

def calcular_percentual_recomendado(probabilidade, max_percent, min_percent):
    # Usar a fórmula de Kelly ajustada
    b = 1  # Supondo odds justas
    p = probabilidade / 100
    q = 1 - p
    
    # Calcula a fração de Kelly
    f_star = (b * p - q) / b
    
    # Ajustar para dentro dos limites fornecidos
    f_star = max(min(f_star, max_percent / 100), min_percent / 100)
    
    # Se f_star for negativo, definimos como o valor mínimo
    if f_star < min_percent / 100:
        f_star = min_percent / 100
    
    # Converte para percentual
    percentual_recomendado = round(f_star * 100, 2)
    return percentual_recomendado

def fazer_previsao(ODD_H, ODD_D, ODD_A, min_percent, max_percent):
    # Converter entradas para float
    ODD_H = converter_para_float(ODD_H)
    ODD_D = converter_para_float(ODD_D)
    ODD_A = converter_para_float(ODD_A)

    data = pd.DataFrame(
        {'H/A': [ODD_H / ODD_A], 'Diff': [(ODD_H / ODD_D) - (ODD_H / ODD_A)]})
    
    previsao_LayAway = model_LayAway.predict(data)[0]
    previsao_LayHome = model_LayHome.predict(data)[0]

    if previsao_LayAway == previsao_LayHome:
        resultado = 'Não entre!'
    else:
        if previsao_LayAway == 1:
            entrada_LayAway = 'SIM'
        else:
            entrada_LayAway = 'NAO'

        probabilidade_LayAway = round(
            100 * model_LayAway.predict_proba(data)[0][1], 2)
        probabilidade_LayHome = round(
            100 * model_LayHome.predict_proba(data)[0][1], 2)
        
        percentual_recomendado = calcular_percentual_recomendado(
            probabilidade_LayAway if entrada_LayAway == 'SIM' else probabilidade_LayHome,
            max_percent, 
            min_percent
        )

        resultado = f"entrada LayAway (se Odd> 1.17): {entrada_LayAway}\n" \
                    f"---> probabilidade: {probabilidade_LayAway}%\n" \
                    f"---> Percentual recomendado da banca: {percentual_recomendado}%\n" \
                    f"\n" \
                    f"entrada Home: {'SIM' if probabilidade_LayAway > 68.2 else 'NAO'}\n" \
                    f"obs: Muito risco, apenas 67% de acerto (odds>1.489)\n" \
                    f"\n" \
                    f"entrada LayHome (se Odd> 1.28): {'SIM' if previsao_LayHome == 1 else 'NAO'}\n" \
                    f"---> probabilidade: {probabilidade_LayHome}%\n" \
                    f"---> Percentual recomendado da banca: {percentual_recomendado}%\n"

    return resultado

# Criar uma interface Gradio com layout simples
iface = gr.Interface(
    fn=fazer_previsao,
    inputs=[
        gr.Textbox(label="Odds para CASA vencer"),
        gr.Textbox(label="Odds para EMPATE"),
        gr.Textbox(label="Odds para VISITANTE vencer"),
        gr.Slider(1, 40, label="Percentual Mínimo da Banca (%)", value=1),  # Slider mínimo com valor inicial 1
        gr.Slider(10, 100, label="Percentual Máximo da Banca (%)", value=100)  # Slider máximo com valor inicial 100
    ],
    outputs="text",
    title="Redução de Risco em Apostas",
    description="Insira as Odds e obtenha uma sugestão para entradas LayAway (CASA vence ou EMPATA) e LayHome (VISITANTE vence ou EMPATA), juntamente com o percentual recomendado da banca."
)

iface.launch()