#!/usr/bin/env python3
"""
Script que busca tablas que comienzan con "temporal_" en una base de datos MySQL
y las altera para añadir un campo 'Protocolo' y un índice.
"""
import sys
import mysql.connector

# ---- Configuración de la base de datos ----
# Asegúrate de reemplazar estos valores con los de tu entorno
DB_CONFIG = {
   'host': 'base223.c8lcuo0a2bu6.us-east-1.rds.amazonaws.com',
   # 'host': '10.2.12.223',
    'user': 'gps',
    'password': 'p0o9i8u7',
    'database': 'gps_reportes',
    'charset': 'utf8mb4',
    'use_pure': True,
}

def get_temporal_tables(db_cursor):
 
    try:
        query = """
            SELECT table_name 
            FROM information_schema.tables 
            WHERE table_schema = %s AND table_name LIKE 'temporal_%%'
        """
        db_cursor.execute(query, (DB_CONFIG['database'],))
        tables = [row[0] for row in db_cursor.fetchall()]
        return tables
    except mysql.connector.Error as err:
        print(f"Error al obtener la lista de tablas: {err}", file=sys.stderr)
        return []

def alter_table_add_field_and_index(db_cursor, table_name):
  
    try:
      
        # Añadir un índice al campo 'Protocolo' para optimizar búsquedas
        add_index_query = f"""
           CREATE INDEX idx_reporte_fecha_enproceso ON  {table_name} (TipoReporte DESC, Fecha DESC, EnProceso);
        """
        print(f"Creando índice 'idx_protocolo' en la tabla '{table_name}'...")
        db_cursor.execute(add_index_query)

        print(f"Tabla '{table_name}' alterada exitosamente. Se añadió el campo 'Protocolo' y su índice.")
    except mysql.connector.Error as err:
        # Se maneja el error específico de que el índice ya existe
        if err.errno == 1061:  # ER_DUP_KEYNAME
            print(f"Índice 'idx_protocolo' ya existe en la tabla '{table_name}'. Continuando...")
        else:
            print(f"Error al alterar la tabla '{table_name}': {err}", file=sys.stderr)
            # Rollback en caso de error
            db_cursor.connection.rollback()
            return False
    
    return True

def main():
    """
    Función principal que ejecuta el proceso.
    """
    conn = None
    try:
        print("Conectando a la base de datos...")
        conn = mysql.connector.connect(**DB_CONFIG)
        cursor = conn.cursor()
        print("Conexión exitosa. Buscando tablas 'temporal_'...")
        
        temporal_tables = get_temporal_tables(cursor)
        
        if not temporal_tables:
            print("No se encontraron tablas que comiencen con 'temporal_'. Saliendo.")
            return

        print(f"Se encontraron {len(temporal_tables)} tablas para modificar:")
        for table in temporal_tables:
            print(f"- {table}")
        
        for table_name in temporal_tables:
            if alter_table_add_field_and_index(cursor, table_name):
                # Realizar commit solo si la alteración fue exitosa para la tabla actual
                conn.commit()
            print("-" * 30)

    except mysql.connector.Error as err:
        if err.errno == mysql.connector.errorcode.ER_ACCESS_DENIED_ERROR:
            print("Error de autenticación: verifica tu usuario o contraseña.", file=sys.stderr)
        elif err.errno == mysql.connector.errorcode.ER_BAD_DB_ERROR:
            print("La base de datos no existe.", file=sys.stderr)
        else:
            print(f"Ocurrió un error inesperado: {err}", file=sys.stderr)
    finally:
        if conn and conn.is_connected():
            cursor.close()
            conn.close()
            print("Conexión a la base de datos cerrada.")

if __name__ == '__main__':
    main()
