#!/usr/bin/env bash
# ==============================================================================
# Script Unificado de Instalación Offline para Zimbra Collaboration
# ==============================================================================

set -e

echo "==> Inicio del proceso de instalación offline de Zimbra..."

# 1. Comprobar permisos de root
if [ "$(id -u)" -ne 0 ]; then
    echo "Error: Este script debe ejecutarse como root o con sudo." >&2
    exit 1
fi

DEB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$DEB_DIR"

# 2. Verificar que existan archivos .deb
DEB_COUNT=$(ls -1 *.deb 2>/dev/null | wc -l)
if [ "$DEB_COUNT" -eq 0 ]; then
    echo "Error: No se encontraron archivos .deb en $DEB_DIR" >&2
    exit 1
fi

echo "==> Se encontraron $DEB_COUNT paquetes .deb para procesar."

# 3. Prevenir errores de 'No such file or directory' creando la estructura base
echo "==> Pre-creando estructura de carpetas en /opt/zimbra..."
mkdir -p /opt/zimbra/common/etc/java
mkdir -p /opt/zimbra/libexec
mkdir -p /opt/zimbra/bin

# Crear un stub temporal de configrewrite para engatusar al script postinst de zimbra-postfix
if [ ! -f /opt/zimbra/libexec/configrewrite ]; then
    echo '#!/bin/sh' > /opt/zimbra/libexec/configrewrite
    echo 'exit 0' >> /opt/zimbra/libexec/configrewrite
    chmod +x /opt/zimbra/libexec/configrewrite
fi

# 4. Desempaquetar paquetes sin ejecutar scripts postinst (evita errores de binarios faltantes)
echo "==> Desempaquetando paquetes localmente (dpkg --unpack)..."
dpkg --unpack *.deb || true

# 5. Configurar paquetes ignorando dependencias circulares temporales
echo "==> Configurando paquetes instalados..."
dpkg --configure -a --force-confold --force-confdef || true

# 6. Reparar la base de datos de paquetes
echo "==> Resolviendo dependencias e inconsistencias de APT..."
export DEBIAN_FRONTEND=noninteractive
apt-get install -f -y || true
dpkg --configure -a

echo "================================================================="
echo " Preinstalación de paquetes completada sin errores."
echo " Iniciando el instalador oficial de Zimbra..."
echo "================================================================="
echo ""

# 7. Verificar y ejecutar el instalador oficial de Zimbra automáticamente
if [ -f "./install.sh" ]; then
    chmod +x ./install.sh
    ./install.sh "$@"
else
    echo "Error: No se encontró el archivo ./install.sh en este directorio." >&2
    exit 1
fi
