#!/bin/bash

# ==============================================================================
# Script para hacer Downgrade de Docker en sistemas basados en Debian/Ubuntu (v2)
# ==============================================================================
#
# ADVERTENCIA: Este script desinstalará la versión actual de Docker
# y eliminará los datos de Docker existentes (imágenes, contenedores, volúmenes).
# Se recomienda hacer una copia de seguridad si tienes datos importantes.
#
# Uso:
# 1. Guarda este script como 'downgrade_docker.sh'.
# 2. Dale permisos de ejecución: chmod +x downgrade_docker.sh
# 3. Ejecútalo con sudo: sudo ./downgrade_docker.sh
#
# ==============================================================================

set -e # Termina el script si algún comando falla

# --- 1. Definir la versión de Docker a instalar ---
# Cambia esta variable si deseas una versión diferente.
# Busca versiones disponibles con: apt-cache madison docker-ce
# El formato debe ser como "5:27.1.1-1~ubuntu.22.04~jammy"
# Dejaremos esto en blanco por ahora para que puedas elegir de la lista.
TARGET_DOCKER_VERSION=""

echo "--- Iniciando el proceso de downgrade de Docker (v2) ---"

# --- 2. Desbloquear (unhold) paquetes de Docker ---
echo "Paso 1: Desbloqueando paquetes de Docker existentes..."
sudo apt-mark unhold docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin || echo "No se encontraron paquetes de Docker bloqueados, continuando."

# --- 3. Detener los servicios de Docker ---
echo "Paso 2: Deteniendo los servicios de Docker..."
sudo systemctl stop docker.service
sudo systemctl stop docker.socket
sudo systemctl stop containerd

# --- 4. Desinstalar la versión actual de Docker ---
echo "Paso 3: Desinstalando los paquetes de Docker actuales..."
# Se agrega --allow-change-held-packages para asegurar la desinstalación
sudo apt-get remove --allow-change-held-packages -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo apt-get autoremove -y --purge

# --- 5. Limpiar directorios residuales (¡CUIDADO!) ---
echo "Paso 4: Limpiando directorios de Docker (esto eliminará imágenes y contenedores)..."
# Comentado por seguridad. Descomenta si realmente quieres una limpieza completa.
# sudo rm -rf /var/lib/docker
# sudo rm -rf /var/lib/containerd

# --- 6. Asegurar que el repositorio de Docker esté configurado ---
echo "Paso 5: Configurando el repositorio de Docker..."
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Añadir el repositorio a las fuentes de Apt
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

# --- 7. Listar las versiones disponibles y solicitar al usuario que elija ---
echo "Paso 6: Versiones de Docker disponibles en el repositorio:"
apt-cache madison docker-ce | awk '{print $3}'

echo -e "\nPor favor, copia y pega la versión exacta que deseas instalar de la lista anterior (ej: 5:27.1.1-1~ubuntu.22.04~jammy):"
read -r TARGET_DOCKER_VERSION

if [ -z "$TARGET_DOCKER_VERSION" ]; then
    echo "No se ha seleccionado ninguna versión. Abortando."
    exit 1
fi

# --- 8. Instalar la versión de Docker seleccionada ---
echo "Paso 7: Instalando la versión $TARGET_DOCKER_VERSION..."
sudo apt-get install -y docker-ce=$TARGET_DOCKER_VERSION docker-ce-cli=$TARGET_DOCKER_VERSION containerd.io docker-buildx-plugin docker-compose-plugin

# --- 9. Verificar la instalación ---
echo "Paso 8: Verificando la versión de Docker instalada..."
docker --version

# --- 10. Bloquear la versión de Docker (opcional pero recomendado) ---
echo "Paso 9: Bloqueando la versión de Docker para evitar actualizaciones automáticas."
sudo apt-mark hold docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

echo -e "\n--- Proceso de downgrade de Docker completado. ---"
echo "Recuerda reiniciar los servicios que dependen de Docker, como CasaOS o los contenedores específicos."
echo "Puedes reiniciar el servicio de Docker con: sudo systemctl restart docker"
