#!/bin/bash

# Script para actualizar Linux Mint 20.x o 21.x a 21.3 "Victoria" sin confirmación
# Resuelve paquetes rotos, limpia archivos obsoletos y automatiza el proceso

# Colores para mensajes
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # Sin color

# Función para mostrar mensajes de error y salir
error_exit() {
    echo -e "${RED}ERROR: $1${NC}"
    exit 1
}

# Función para mostrar mensajes de éxito
success_msg() {
    echo -e "${GREEN}ÉXITO: $1${NC}"
}

# Verificar si el script se ejecuta como root
if [ "$EUID" -ne 0 ]; then
    error_exit "Este script debe ejecutarse como root. Usa sudo."
fi

# Actualizar listas de paquetes y sistema actual
echo "Actualizando listas de paquetes y sistema actual..."
apt update -y || error_exit "No se pudo actualizar las listas de paquetes."
apt full-upgrade -y || error_exit "No se pudo actualizar el sistema actual."

# Limpiar paquetes obsoletos y caché
echo "Limpiando paquetes obsoletos y caché..."
apt autoremove -y || error_exit "No se pudo limpiar paquetes obsoletos."
apt autoclean -y || error_exit "No se pudo limpiar la caché."

# Resolver paquetes rotos
echo "Intentando resolver paquetes rotos..."
apt install -f -y || error_exit "No se pudieron resolver paquetes rotos."

# Eliminar archivos de bloqueo de apt/dpkg si existen
echo "Eliminando posibles archivos de bloqueo..."
rm -f /var/lib/apt/lists/lock
rm -f /var/cache/apt/archives/lock
rm -f /var/lib/dpkg/lock-frontend
dpkg --configure -a || error_exit "No se pudo configurar paquetes pendientes."


# Editar los repositorios para apuntar a la nueva versión (21.2 Victoria)
echo "Actualizando repositorios a la nueva versión 21.2 Victoria..."
sudo sed -i 's/vera/victoria/g' /etc/apt/sources.list.d/official-package-repositories.list

# Actualizar nuevamente la lista de repositorios con los cambios
echo "Recargando repositorios..."
sudo apt update -y

# Instalar todos los paquetes de la nueva versión
echo "Instalando la nueva versión de Linux Mint 21.2..."
sudo apt full-upgrade -y

# Limpieza de paquetes obsoletos
echo "Eliminando paquetes obsoletos..."
sudo apt autoremove -y || error_exit "No se pudo limpiar paquetes obsoletos después de la actualización."
sudo apt autoclean -y || error_exit "No se pudo limpiar la caché después de la actualización."

# Resolver paquetes rotos nuevamente (por si acaso)
echo "Verificando y resolviendo paquetes rotos después de la actualización..."
apt install -f -y || error_exit "No se pudieron resolver paquetes rotos después de la actualización."

# Reiniciar el sistema
success_msg "Actualización completada. Reinicie el Sistema para los cambios "
