import mysql.connector
import time

db_config = {
    "host": "localhost",
    "user": "root",
    "password": "vertrigo",
    "database": "educa25_benchmark_innodb"
}

def run_test_queries(cursor, label):
    print(f"\n--- Probando rendimiento: {label} ---")
    results = {}
    
    queries = {
        "Count Notas (300k rows)": "SELECT COUNT(*) FROM notas",
        "Select Matriculados (Sample)": "SELECT * FROM matriculados LIMIT 5000",
        "Join Alumnos/Notas (Complex)": """
            SELECT a.nombre, n.codigoasig, n.nota1 
            FROM alumnos a 
            INNER JOIN notas n ON a.numidentif = n.numidentif 
            LIMIT 5000
        """
    }
    
    for name, sql in queries.items():
        start_time = time.time()
        cursor.execute(sql)
        cursor.fetchall()
        end_time = time.time()
        duration = end_time - start_time
        results[name] = duration
        print(f"  {name}: {duration:.4f}s")
    
    return results

try:
    conn = mysql.connector.connect(**db_config)
    cursor = conn.cursor()
    
    # 1. Medir MyISAM (Actual)
    myisam_results = run_test_queries(cursor, "MYISAM (Original)")
    
    # 2. Convertir a InnoDB
    print("\n--- Convirtiendo tablas a InnoDB (Esto puede tardar)... ---")
    cursor.execute("SHOW TABLES")
    tables = [t[0] for t in cursor.fetchall()]
    
    start_conv = time.time()
    for table in tables:
        # Solo convertir tablas base, no vistas
        cursor.execute(f"SHOW FULL TABLES LIKE '{table}'")
        if cursor.fetchone()[1] == 'BASE TABLE':
            print(f"  Convirtiendo {table}...", end="\r")
            cursor.execute(f"ALTER TABLE `{table}` ENGINE=InnoDB")
    end_conv = time.time()
    print(f"\nConversión completada en {end_conv - start_conv:.2f}s")
    
    # 3. Medir InnoDB (Nuevo)
    innodb_results = run_test_queries(cursor, "INNODB (Actualizado)")
    
    # 4. Resumen
    print("\n" + "="*40)
    print("RESUMEN DE IMPACTO")
    print("="*40)
    for name in myisam_results:
        m_time = myisam_results[name]
        i_time = innodb_results[name]
        diff = ((i_time - m_time) / m_time) * 100 if m_time > 0 else 0
        print(f"{name}:")
        print(f"  MyISAM: {m_time:.4f}s")
        print(f"  InnoDB: {i_time:.4f}s")
        print(f"  Cambio: {diff:+.2f}%")
        
    cursor.close()
    conn.close()

except mysql.connector.Error as err:
    print(f"Error: {err}")
