#!/usr/bin/env bash
#
# Instala Virtualmin si no esta. Solo si el servidor esta recien hecho.
#
#   sudo bash instalar-virtualmin.sh
#
# El instalador oficial hace preguntas. Este script las automatiza con las
# respuestas que interesan para este caso, y al final imprime lo que dejo
# puesto.
#
# ATENCION: Virtualmin se instala sobre un servidor NUEVO. En uno que ya
# tenga sitios, cambia repositorios, firewall y servicios, y despues es
# dificil saber que toco.

set -euo pipefail

log()  { printf '\n\033[1;36m==> %s\033[0m\n' "$1"; }
ok()   { printf '    \033[32mOK\033[0m  %s\n' "$1"; }
aviso(){ printf '    \033[33m!!\033[0m  %s\n' "$1"; }

[[ $EUID -eq 0 ]] || { echo "Se corre como root: sudo bash instalar-virtualmin.sh"; exit 1; }

if virtualmin --version >/dev/null 2>&1; then
    log "Virtualmin ya esta instalado"
    ok "Virtualmin $(virtualmin --version | head -1)"
    echo
    echo "No hace falta seguir. Ve a configurar-portal.sh"
    exit 0
fi

log "Descarga del instalador"
cd /root
curl -sLO https://github.com/virtualmin/virtualmin-gpl/releases/download/latest/install.sh
chmod +x install.sh
[[ -s install.sh ]] || { aviso "No se pudo descargar el instalador"; exit 1; }
ok "install.sh ($(wc -l < install.sh) lineas)"

# El instalador oficial responde a estas preguntas por consola. En vez de
# adivinar el formato, se corre en modo automatico con las banderas
# documentadas y se dejan fuera las que si requieren interaccion.
log "Instalacion (puede tardar 10-20 minutos)"
./install.sh --mode bootstrap --bundle LEMP --no-bootstrap \
    --user admin \
    --pass "CambiarEstaClave123" \
    --port 10000 \
    --fqdn localhost \
    --ssl 1 \
    --force

# El usuario por defecto del panel es root. Se deja, pero con contrasena.
log "Contrasena del panel"
if [[ ! -f /root/virtualmin-install.log ]]; then
    aviso "No se encontro el registro de instalacion"
else
    ok "registro en /root/virtualmin-install.log"
fi

log "Comprobacion"
if virtualmin --version >/dev/null 2>&1; then
    ok "Virtualmin $(virtualmin --version | head -1)"
    ok "Webmin esta en https://$(hostname -I | awk '{print $1}'):10000"
else
    aviso "Virtualmin no quedo instalado. Revisa el registro de arriba."
    aviso "El instalador interactivo es la via mas fiable:"
    aviso "  cd /root && ./install.sh --mode bootstrap"
    aviso "  BorgBackup -> n | Reemplazar script -> s | Instalar -> s"
    aviso "  Desinstalar webmin -> n | Cambiar puerto -> n | SSL -> y"
fi

printf '\n\033[1;32m  Siguiente paso\033[0m\n\n'
echo "  sudo bash deploy/virtualmin/configurar-portal.sh <DOMINIO> <USUARIO> <CORREO>"
echo