#!/usr/bin/env bash
set -Eeuo pipefail

APP_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)"
cd "$APP_DIR"

fail() {
  printf '\n[ERRO] %s\n' "$1" >&2
  exit 1
}

if [[ ! -f package.json || ! -f app.js ]]; then
  fail "Execute este instalador na Application root, onde ficam package.json e app.js."
fi

find_node_runtime() {
  if command -v node >/dev/null 2>&1 && command -v npm >/dev/null 2>&1; then
    return 0
  fi

  local activation="" app_relative="" app_nodevenv=""
  if [[ "$APP_DIR" == "${HOME}/"* ]]; then
    app_relative="${APP_DIR#"${HOME}/"}"
    app_nodevenv="${HOME}/nodevenv/${app_relative}"
  fi
  if [[ -n "$app_nodevenv" && -d "$app_nodevenv" ]]; then
    activation="$(find "$app_nodevenv" -type f -name activate -print -quit 2>/dev/null || true)"
  fi
  if [[ -n "$activation" ]]; then
    # O arquivo pertence ao ambiente criado pelo Setup Node.js App do cPanel.
    # shellcheck disable=SC1090
    source "$activation"
  fi

  if command -v node >/dev/null 2>&1 && command -v npm >/dev/null 2>&1; then
    return 0
  fi

  local major candidate
  for major in 22 20 18; do
    candidate="/opt/alt/alt-nodejs${major}/root/usr/bin"
    if [[ -x "${candidate}/node" && -x "${candidate}/npm" ]]; then
      export PATH="${candidate}:${PATH}"
      return 0
    fi
  done

  return 1
}

if ! find_node_runtime; then
  fail "Node.js/NPM não estão disponíveis. Crie primeiro a aplicação em cPanel > Setup Node.js App usando Node 22, 20 ou 18."
fi

NODE_MAJOR="$(node -p "Number(process.versions.node.split('.')[0])")"
if [[ "$NODE_MAJOR" -lt 18 ]]; then
  fail "Node.js 18 ou superior é obrigatório. Versão encontrada: $(node --version)."
fi

printf '[1/4] Node %s e npm %s encontrados.\n' "$(node --version)" "$(npm --version)"
printf '[2/4] Instalando dependências de produção...\n'
npm install --omit=dev

if [[ ! -f .env.production ]]; then
  cp .env.production.example .env.production
  chmod 600 .env.production 2>/dev/null || true
  printf '\n[ATENÇÃO] .env.production foi criado. Preencha os valores TROCAR_* e execute novamente:\n'
  printf 'bash cpanel-install.sh\n'
  exit 2
fi

printf '[3/4] Validando .env.production...\n'
npm run production:check -- .env.production

printf '[4/4] Atualizando o banco de dados...\n'
npm run cpanel:migrate

printf '\n[OK] Instalação concluída. Reinicie a aplicação no Setup Node.js App.\n'
