import pymysql

# Credenciales comunes
DB_USER = "gps"
DB_PASS = "p0o9i8u7"

# Hosts
ORIGEN_HOST = "10.2.12.8"
DESTINO_HOST = "10.2.12.223"
DB_NAME = "gps"  # Asumo que la base se llama igual

def get_temporal_tables(connection):
    with connection.cursor() as cursor:
        cursor.execute("SHOW TABLES LIKE 'temporal_%'")
        return [row[0] for row in cursor.fetchall()]

def contar_filas(connection, tabla):
    with connection.cursor() as cursor:
        cursor.execute(f"SELECT COUNT(*) FROM {tabla}")
        return cursor.fetchone()[0]

def copiar_datos(origen, destino, tabla):
    with origen.cursor() as o_cursor, destino.cursor() as d_cursor:
        o_cursor.execute(f"SELECT * FROM {tabla}")
        rows = o_cursor.fetchall()
        if not rows:
            return 0

        columnas = [desc[0] for desc in o_cursor.description]
        placeholders = ','.join(['%s'] * len(columnas))
        columnas_sql = ','.join(columnas)

        insert_sql = f"INSERT INTO {tabla} ({columnas_sql}) VALUES ({placeholders})"
        d_cursor.executemany(insert_sql, rows)
        destino.commit()
        return len(rows)

def borrar_datos(connection, tabla):
    with connection.cursor() as cursor:
        cursor.execute(f"DELETE FROM {tabla}")
        connection.commit()

def main():
    try:
        origen_conn = pymysql.connect(
            host=ORIGEN_HOST, user=DB_USER, password=DB_PASS,
            database=DB_NAME, charset='utf8mb4', cursorclass=pymysql.cursors.Cursor
        )
        destino_conn = pymysql.connect(
            host=DESTINO_HOST, user=DB_USER, password=DB_PASS,
            database=DB_NAME, charset='utf8mb4', cursorclass=pymysql.cursors.Cursor
        )

        tablas = get_temporal_tables(origen_conn)
        for tabla in tablas:
            print(f"Procesando tabla: {tabla}")
            filas_origen = contar_filas(origen_conn, tabla)
            if filas_origen == 0:
                print("  No hay datos. Saltando...")
                continue

            filas_copiadas = copiar_datos(origen_conn, destino_conn, tabla)
            filas_destino = contar_filas(destino_conn, tabla)

            print(f"  Copiadas: {filas_copiadas}, Total destino: {filas_destino}")

            if filas_destino >= filas_copiadas:
                borrar_datos(origen_conn, tabla)
                print("  Copia exitosa. Datos eliminados del origen.")
            else:
                print("  Error: No se copiaron todos los datos. No se borra origen.")

    except Exception as e:
        print(f"Error general: {e}")
    finally:
        origen_conn.close()
        destino_conn.close()

if __name__ == "__main__":
    main()
