import mysql.connector
from collections import Counter

# === Paso 1: Mapa de sectores (cilindro dividido en 4 partes) ===
orden_ruleta = [0, 32, 15, 19, 4, 21, 2, 25, 17, 34, 6, 27,
                13, 36, 11, 30, 8, 23, 10, 5, 24, 16, 33, 1,
                20, 14, 31, 9, 22, 18, 29, 7, 28, 12, 35, 3, 26]

sector_4 = {}
for i, numero in enumerate(orden_ruleta):
    sector = (i * 4) // len(orden_ruleta) + 1  # divide en 4 sectores
    sector_4[numero] = sector

# === Paso 2: Obtener los últimos 1000 tiros con su ID ===
try:
    conn = mysql.connector.connect(
        host="localhost",
        user="root",
        password="PilHal0812!",
        database="ruleta"
    )
    cursor = conn.cursor()
    cursor.execute("SELECT id, numero FROM ruleta_numeros WHERE numero IS NOT NULL ORDER BY id DESC LIMIT 1000")
    filas = cursor.fetchall()
    cursor.close()
    conn.close()

    filas = [(int(id), int(n)) for id, n in filas if str(n).strip().isdigit()]
    filas.reverse()  # de antiguo a reciente

except Exception as e:
    print(f"❌ Error al conectar o procesar los datos: {e}")
    exit()

numeros = [n for _, n in filas]
ids = [i for i, _ in filas]

# === Paso 3: Evaluar estrategia de equilibrio en historial ===
aciertos = 0
total = 0

for i in range(50, len(numeros) - 1):
    recientes = numeros[i-50:i]
    sectores_vistos = [sector_4.get(n) for n in recientes if n in sector_4]

    ultima_vez = {}
    for j, s in enumerate(reversed(sectores_vistos)):
        if s not in ultima_vez:
            ultima_vez[s] = j

    if len(ultima_vez) < 4:
        continue

    predicho = max(ultima_vez, key=ultima_vez.get)
    real = sector_4.get(numeros[i])

    if real == predicho:
        aciertos += 1
    total += 1

print("\n🔄 Estrategia de Equilibrio (cilindro dividido en 4 sectores)")
print(f"📈 Evaluadas: {total} predicciones (últimos 1000 tiros)")
print(f"✅ Aciertos: {aciertos}")
print(f"🎯 Precisión: {round((aciertos / total) * 100, 2)}%")

# === Paso 4: Predicción actual (correcto: contar desde el más reciente hacia atrás) ===
ausencia = {1: None, 2: None, 3: None, 4: None}
contador = 0

# desde el más reciente hacia atrás
for idx in range(len(numeros)-1, -1, -1):
    num = numeros[idx]
    sector = sector_4.get(num)
    if not sector:
        continue

    # si no se ha registrado la última aparición del sector
    for s in ausencia:
        if ausencia[s] is None:
            ausencia[s] = contador if s == sector else ausencia[s]
    contador += 1

# tomar solo los sectores con más de 15 tiros de ausencia
candidatos = [(s, v) for s, v in ausencia.items() if v is not None and v > 15]

if candidatos:
    candidatos.sort(key=lambda x: x[1], reverse=True)
    sector_predicho, tiros_sin_salir = candidatos[0]

    # encontrar ID donde ese sector salió por última vez
    for idx in range(len(numeros)-1, -1, -1):
        if sector_4.get(numeros[idx]) == sector_predicho:
            id_ultimo = ids[idx]
            break

    print("\n🔮 Predicción próxima jugada (equilibrio >15 vueltas):")
    print(f"👉 Sector predicho: Sector {sector_predicho} (ausente por {tiros_sin_salir} tiros)")
    print(f"📌 Última vez que salió ese sector: ID {id_ultimo}")
else:
    print("\nℹ️ No hay sectores con más de 15 tiros de ausencia en este momento.")