#!/bin/bash
# ==============================================================================
# Ichill Cloud — Instalador otimizado para CONTABO (installcontabo)
# ==============================================================================
# Wrapper do install.sh (todos os passos padrão) + EXTRAS CONTABO:
#   - PHP 8.4 (repo Remi)
#   - FFmpeg (RPM Fusion)
#   - Roundcube + Postfix (verificação — já vêm com o CWP7)
#
# USO:
#   sudo ./installcontabo.sh                       # instalação COMPLETA (VPS principal Contabo)
#   sudo ./installcontabo.sh --node                # instala um WORKER NODE limpo
#   sudo ./installcontabo.sh --dry-run             # simula (não executa)
#   sudo ./installcontabo.sh --offline             # força mirror offline
#   sudo ./installcontabo.sh --skip-cwp            # não instala CWP7
#   sudo ./installcontabo.sh --backup /caminho.tar.gz
#   sudo ./installcontabo.sh --mirror URL
#   sudo ./installcontabo.sh --step N
#
# O bootstrap de 1 comando (Contabo, Rocky 9 limpo):
#   curl -fsSL https://repo.ichill.com.br/installcontabo.sh | bash
# ==============================================================================

set -uo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-}")" && pwd)"
MIRROR_URL="${MIRROR_URL:-https://repo.ichill.com.br}"
# Se rodado via "curl | bash", não há arquivo local: baixa o install.sh p/ /tmp.
if [ "${BASH_SOURCE[0]:-}" = "bash" ] || [ -z "${BASH_SOURCE[0]:-}" ]; then
    INSTALL_SH="/tmp/install.sh"
else
    INSTALL_SH="${SCRIPT_DIR}/install.sh"
fi

DRY_RUN=0
NODE_MODE=0
for arg in "$@"; do
    case "$arg" in
        --dry-run) DRY_RUN=1 ;;
        --node) NODE_MODE=1 ;;
    esac
done

log()  { echo -e "\n\033[1;34m$(printf '%-80s' "=== $1")===\033[0m"; }
info() { echo "  $1"; }
warn() { echo -e "  \033[1;33m[AVISO] $1\033[0m"; }
ok()   { echo -e "  \033[1;32m✓ $1\033[0m"; }
run()  { if [ "$DRY_RUN" = "1" ]; then echo "    [DRY] $*"; else "$@"; fi; }

# ─── Etapa 1: instalador principal ───────────────────────────────────────────
log "Etapa 1/2 — Instalador principal Ichill (install.sh)"
if [ ! -f "$INSTALL_SH" ]; then
    info "install.sh não encontrado localmente — baixando do mirror (${MIRROR_URL}/install.sh)..."
    # Download real (script de ~34KB, inofensivo) para poder simular/executar.
    wget -q -O "$INSTALL_SH" "${MIRROR_URL}/install.sh" || {
        warn "Não foi possível baixar install.sh do mirror — instale manualmente."
        exit 1
    }
fi
bash "$INSTALL_SH" "$@"

# ─── Etapa 2: extras Contabo (só instalação completa, não --node) ────────────
if [ "$NODE_MODE" = "1" ]; then
    info "Modo --node: extras Contabo (PHP 8.4 / FFmpeg / Roundcube) não se aplicam — concluído."
    exit 0
fi

log "Etapa 2/2 — Extras Contabo (PHP 8.4 + FFmpeg + Roundcube/Postfix)"

# PHP 8.4 via Remi
log "Instalando PHP 8.4 (repo Remi)"
if [ "$DRY_RUN" = "1" ]; then
    echo "    [DRY] dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm"
    echo "    [DRY] dnf module reset php -y && dnf module enable php:remi-8.4 -y"
    echo "    [DRY] dnf install -y php php-fpm php-cli php-common php-mysqlnd php-gd php-xml php-mbstring php-zip php-intl php-curl php-opcache"
else
    if php -v 2>/dev/null | grep -q "PHP 8.4"; then
        ok "PHP 8.4 já instalado"
    else
        run dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm || true
        run dnf module reset php -y || true
        run dnf module enable php:remi-8.4 -y || true
        run dnf install -y php php-fpm php-cli php-common php-mysqlnd php-gd php-xml php-mbstring php-zip php-intl php-curl php-opcache || warn "Falha ao instalar PHP 8.4"
        ok "PHP 8.4 instalado"
    fi
fi

# FFmpeg via RPM Fusion
log "Instalando FFmpeg (RPM Fusion)"
if [ "$DRY_RUN" = "1" ]; then
    echo "    [DRY] dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-9.noarch.rpm"
    echo "    [DRY] dnf install -y ffmpeg"
else
    if command -v ffmpeg >/dev/null 2>&1; then
        ok "FFmpeg já instalado"
    else
        run dnf install -y --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-9.noarch.rpm || true
        run dnf install -y ffmpeg || warn "Falha ao instalar FFmpeg"
        ok "FFmpeg instalado"
    fi
fi

# Roundcube + Postfix (vêm com o CWP7)
log "Verificando Roundcube + Postfix (CWP7)"
if [ "$DRY_RUN" = "1" ]; then
    echo "    [DRY] verificar /usr/local/cwpsrv e postfix"
else
    if [ -d "/usr/local/cwpsrv" ]; then
        ok "CWP7 presente (Roundcube + Postfix inclusos)"
    else
        warn "CWP7 não detectado — Roundcube/Postfix não verificados"
    fi
    run systemctl enable --now postfix 2>/dev/null || true
    ok "Postfix ativo"
fi

echo
echo "=============================================================================="
if [ "$DRY_RUN" = "1" ]; then
    echo " SIMULAÇÃO CONCLUÍDA — nenhuma alteração foi feita."
else
    echo " INSTALAÇÃO CONTABO CONCLUÍDA — Sistema pronto (PHP 8.4 + FFmpeg + CWP7)."
fi
echo "=============================================================================="
