# Archivo: limpiartablas226.py

import mysql.connector
import sys
from config import DB_SERVER_226

def conectar_bd(config):
    """Establece y retorna una conexión a la base de datos."""
    try:
        conn = mysql.connector.connect(**config)
        return conn
    except mysql.connector.Error as err:
        print(f"Error al conectar a la base de datos ({config['host']}): {err}")
        sys.exit(1)

def limpiar_y_depurar_tablas_log():
    """
    Itera sobre las tablas 'LOG_', borra registros antiguos
    o elimina la tabla si no contiene datos.
    """
    conn = None
    try:
        conn = conectar_bd(DB_SERVER_226)
        cursor = conn.cursor()
        
        # Consulta para obtener las tablas 'LOG_' que no son 'LOG_E'
        sql_tablas = "SHOW TABLES WHERE `Tables_in_gps_reportes` LIKE 'LOG_%' AND `Tables_in_gps_reportes` NOT LIKE 'LOG_E%'"
        cursor.execute(sql_tablas)
        tablas_log = [row[0] for row in cursor.fetchall()]
        
        tablas_limpiadas_count = 0
        tablas_dropeadas_count = 0
        
        print(f"Encontradas {len(tablas_log)} tablas para procesar.")

        for tabla in tablas_log:
          #  if tablas_limpiadas_count >= 300 or tablas_dropeadas_count >= 200:
           #     print(f"Límite de procesamiento alcanzado. Limpiadas: {tablas_limpiadas_count}, Dropeadas: {tablas_dropeadas_count}")
            #    break
                
            print(f"\n--- Procesando tabla: {tabla} ---")
            
            # Chequear si la tabla tiene datos
            sql_chequeo = f"SELECT MIN(Reporte_FechaGPS) FROM `{tabla}`"
            cursor.execute(sql_chequeo)
            min_fecha = cursor.fetchone()[0]

            if min_fecha:  # La tabla tiene datos
                # Borrar registros con más de 366 días de antigüedad
                sql_borrar = f"DELETE FROM `{tabla}` WHERE DATEDIFF(NOW(), Reporte_FechaGPS) > 366"
                print(f"Borrando registros de {tabla} con más de 366 días...")
                cursor.execute(sql_borrar)
                conn.commit()
                
                print(f"Tabla '{tabla}' limpiada correctamente. Filas afectadas: {cursor.rowcount}")
                tablas_limpiadas_count += 1
            else:  # La tabla no tiene datos, la elimina
                sql_dropear = f"DROP TABLE `{tabla}`"
                print(f"Tabla '{tabla}' sin datos. Eliminándola...")
                cursor.execute(sql_dropear)
                conn.commit()
                print(f"Tabla '{tabla}' eliminada (dropeada) correctamente.")
                tablas_dropeadas_count += 1

    except mysql.connector.Error as err:
        print(f"Error de MySQL: {err}")
    except Exception as e:
        print(f"Ocurrió un error inesperado: {e}")
    finally:
        if conn and conn.is_connected():
            cursor.close()
            conn.close()
            print("\nConexión a la base de datos cerrada.")

if __name__ == '__main__':
    limpiar_y_depurar_tablas_log()