#!/bin/bash
# ============================================================
# MonitorPing — Geração de Release
# Uso: bash build-release.sh [versao]
# Compatível com Git Bash no Windows e Linux/WSL.
# ============================================================
set -euo pipefail

VERSION="${1:-}"
if [[ -z "$VERSION" ]]; then
    VERSION=$(date +%Y.%m.%d)
    echo "Versão não informada — usando: $VERSION"
fi

# ── Configurações do servidor de releases ──────────────────
# SSH: mesmo acesso que você usa para o cPanel
RELEASES_SERVER="amaur971@key.monitorping.com.br"
RELEASES_PATH="/home1/amaur971/releases.monitorping.com.br"

# ── Diretório base do projeto (onde este script está) ───────
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"

# Pasta temporária local (funciona no Windows Git Bash e Linux)
TMP_BASE="${TMPDIR:-/tmp}"
RELEASE_DIR="${TMP_BASE}/monitorping-release-${VERSION}"
TARBALL="${TMP_BASE}/monitorping-${VERSION}.tar.gz"

RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; BOLD='\033[1m'; NC='\033[0m'
log()  { echo -e "  ${GREEN}✓${NC} $1"; }
info() { echo -e "  ${YELLOW}→${NC} $1"; }
err()  { echo -e "  ${RED}✗ ERRO:${NC} $1"; exit 1; }

echo ""
echo -e "${BOLD}  MonitorPing — Build Release v${VERSION}${NC}"
echo ""

# ── Verificações ────────────────────────────────────────────
command -v ssh  &>/dev/null || err "ssh não encontrado. Instale o OpenSSH."
command -v scp  &>/dev/null || err "scp não encontrado. Instale o OpenSSH."
command -v tar  &>/dev/null || err "tar não encontrado."

# ── 1. Prepara diretório limpo ──────────────────────────────
info "Preparando código..."
rm -rf "$RELEASE_DIR"
mkdir -p "$RELEASE_DIR"

# Copia tudo exceto arquivos que não devem ir para clientes
while IFS= read -r -d '' item; do
    name=$(basename "$item")
    # Exclui diretórios/arquivos sensíveis
    case "$name" in
        .git|.env|.env.local|node_modules|*.log) continue ;;
        servidor-licenca|build-release.sh|deploy.sh) continue ;;
        docker-compose.local.yml) continue ;;
    esac
    if [[ -d "$item" ]]; then
        cp -r "$item" "$RELEASE_DIR/"
    else
        cp "$item" "$RELEASE_DIR/"
    fi
done < <(find "$SCRIPT_DIR" -maxdepth 1 -print0 | tail -n +2)

# Grava versão no pacote
echo "$VERSION" > "$RELEASE_DIR/VERSION"
log "Código preparado"

# ── 2. Gera tarball ─────────────────────────────────────────
info "Gerando tarball..."
tar -czf "$TARBALL" -C "$TMP_BASE" "monitorping-release-${VERSION}"
SIZE=$(du -sh "$TARBALL" | cut -f1)
log "Tarball: $(basename "$TARBALL") ($SIZE)"

# ── 3. Envia para o servidor ────────────────────────────────
info "Enviando para releases.monitorping.com.br..."
scp "$TARBALL" "${RELEASES_SERVER}:${RELEASES_PATH}/monitorping-${VERSION}.tar.gz" \
    || err "Falha no SCP. Verifique SSH e o caminho $RELEASES_PATH no servidor."

info "Atualizando latest.tar.gz e latest.version..."
ssh "$RELEASES_SERVER" bash <<EOF
    set -e
    cd "${RELEASES_PATH}"
    # ln -sf não funciona em todos os hostings — copia mesmo
    cp "monitorping-${VERSION}.tar.gz" latest.tar.gz
    echo "${VERSION}" > latest.version
    echo "  latest.version: \$(cat latest.version)"
    echo "  latest.tar.gz:  \$(du -sh latest.tar.gz | cut -f1)"
EOF
log "Servidor atualizado"

# ── 4. Limpa temporários ────────────────────────────────────
rm -rf "$RELEASE_DIR" "$TARBALL"
log "Temporários removidos"

echo ""
echo -e "  ${GREEN}${BOLD}Release v${VERSION} publicado com sucesso!${NC}"
echo ""
echo -e "  URL de download : https://releases.monitorping.com.br/latest.tar.gz"
echo -e "  Versão atual    : https://releases.monitorping.com.br/latest.version"
echo ""
echo -e "  Os clientes atualizam automaticamente à noite ou com:"
echo -e "  ${BOLD}sudo bash /opt/monitorping/update.sh${NC}"
echo ""
