#!/bin/bash
# Removemos 'set -e' para evitar que advertencias menores de dpkg detengan el script
export DEBIAN_FRONTEND=noninteractive
BASE="$(cd "$(dirname "$0")" && pwd)"

if [ "$EUID" -ne 0 ]; then
    echo "Ejecutar como root."
    exit 1
fi

# 1. Deshabilitar todos los repositorios existentes del sistema
rm -f /etc/apt/sources.list.d/*

# 2. Re-generar o asegurar el archivo Packages.gz del repositorio local
if [ -d "$BASE/packages" ]; then
    echo "Generando/verificando índice de repositorio local..."
    cd "$BASE/packages"
    if command -v dpkg-scanpackages &> /dev/null; then
        dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
    fi
    cd "$BASE"
fi

# 3. Configurar el repositorio local en /etc/apt/sources.list
cat <<EOF > /etc/apt/sources.list
deb [trusted=yes] file:$BASE/packages ./
EOF

# 4. Forzar a APT a permitir paquetes no firmados/locales a nivel global
cat <<EOF > /etc/apt/apt.conf.d/99offline-zimbra
APT::Get::AllowUnauthenticated "true";
Acquire::AllowInsecureRepositories "true";
Acquire::AllowDowngradable "true";
EOF

# 5. Copiar llaves GPG por seguridad si existen
cp -r "$BASE/keys/trusted.gpg.d/"* /etc/apt/trusted.gpg.d/ 2>/dev/null || true

# 6. Actualizar lista de paquetes local
echo "Actualizando índices de APT..."
apt-get update

# 7. DESBLOQUEO Y REPARACIÓN (CRÍTICO: Esto debe ir ANTES de apt-get install)
echo "Forzando la descompresión de paquetes locales para sanear dpkg..."
if [ -d "$BASE/packages" ]; then
    cd "$BASE/packages"
    dpkg -i --force-depends *.deb || true
    dpkg --configure -a || true
    apt-get install -f -y --no-download || true
    cd "$BASE"
fi

# 8. Preinstalar dependencias base desde el repo local
echo "Instalando paquetes base..."
apt-get install -y perl net-tools sysstat sqlite3 libaio1 dpkg-dev

# 9. Ejecutar el instalador de Zimbra
echo "Iniciando instalación de Zimbra..."
cd "$BASE/zcs"
chmod +x install.sh
./install.sh -s
