import pandas as pd
import os, glob, json, random
from datetime import datetime
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# Ruta absoluta de los CSV
directorio = "/var/www/b02y.com/html/xxx/historial_csv"

# Buscar los 3 archivos más recientes
archivos = glob.glob(os.path.join(directorio, "historial_*.csv"))
archivos = sorted(archivos, key=os.path.getmtime, reverse=True)[:3]

if not archivos:
    print("❌ No se encontraron archivos CSV.")
    exit()

resultados = []

for archivo in archivos:
    try:
        df = pd.read_csv(archivo)
        df = df[pd.to_numeric(df["numero"], errors="coerce").notnull()]
        df["numero"] = df["numero"].astype(int)

        numeros = df["numero"].tolist()
        if len(numeros) < 20:
            continue  # ignorar archivos pequeños

        # Preparar dataset con 6 entradas hacia atrás
        X, y = [], []
        for i in range(len(numeros) - 6):
            secuencia = numeros[i:i+6]  # 6 entradas
            objetivo = numeros[i+6]     # el siguiente
            X.append(secuencia)
            y.append(objetivo)

        # Dividir en entrenamiento y prueba
        X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
        modelo = RandomForestClassifier(n_estimators=100, random_state=42)
        modelo.fit(X_train, y_train)

        preds = modelo.predict(X_test)
        precision = accuracy_score(y_test, preds)

        # Benchmark aleatorio
        preds_random = [random.choice(range(37)) for _ in range(len(y_test))]
        precision_random = accuracy_score(y_test, preds_random)

        # Usar últimos 6 reales para predecir
        secuencia_actual = numeros[-6:]
        pred = modelo.predict([secuencia_actual])[0]

        resultados.append({
            "archivo": os.path.basename(archivo),
            "basado_en": secuencia_actual,
            "prediccion": int(pred),
            "precision_modelo": round(precision * 100, 2),
            "precision_random": round(precision_random * 100, 2)
        })

    except Exception as e:
        print(f"⚠️ Error procesando {archivo}: {e}")

# Guardar en JSON nuevo
ruta_json = "/var/www/b02y.com/html/xxx/test/prediccion_secuencias_6.json"
try:
    with open(ruta_json, "w") as f:
        json.dump(resultados, f, indent=2)
    print(f"✅ {os.path.basename(ruta_json)} generado correctamente.")
except Exception as e:
    print(f"❌ Error guardando JSON: {e}")

# Mostrar resumen
print("✅ Predicciones generadas:")
for r in resultados:
    print(f"- {r['archivo']} → Basado en {r['basado_en']} → Predice {r['prediccion']} | Precisión: {r['precision_modelo']}% (Azar: {r['precision_random']}%)")
