#!/usr/bin/env bash
# dtunnel — instalador universal v2 (Linux, macOS, WSL)
# Instala el CLI npm @desarrollado/dtunnel (túnel nativo, sin frpc).
#
# Uso:
#   curl -fsSL https://install.desarrollado.com/dtunnel/install | sudo bash
#   curl -O https://install.desarrollado.com/dtunnel/install && sudo bash install
#
# Auditar antes de ejecutar:
#   curl -fsSL https://install.desarrollado.com/dtunnel/install
#
set -euo pipefail

DTUNNEL_VERSION="${DTUNNEL_VERSION:-2.0.3}"
NPM_PKG="@desarrollado/dtunnel@${DTUNNEL_VERSION}"
INSTALL_BASE="${DTUNNEL_INSTALL_URL:-https://install.desarrollado.com/dtunnel}"
FALLBACK_BASE="${DTUNNEL_INSTALL_FALLBACK:-https://dtunnel.desarrollado.com/install/dtunnel}"

info()  { echo "==> $*"; }
warn()  { echo "WARN: $*" >&2; }
die()   { echo "ERROR: $*" >&2; exit 1; }

need_node() {
  if ! command -v node >/dev/null 2>&1; then
    die "Node.js 18+ es requerido. Instálalo desde https://nodejs.org o con nvm, luego vuelve a ejecutar este script."
  fi
  local major
  major="$(node -p "process.versions.node.split('.')[0]")"
  if [ "$major" -lt 18 ]; then
    die "Node.js $(node -v) detectado; se requiere v18 o superior."
  fi
  if ! command -v npm >/dev/null 2>&1; then
    die "npm no encontrado. Reinstala Node.js desde https://nodejs.org"
  fi
}

install_cli() {
  info "Instalando ${NPM_PKG} (túnel nativo v2, sin frpc)"
  if [ "$(id -u)" -eq 0 ]; then
    npm install -g "$NPM_PKG"
  else
    npm install -g "$NPM_PKG" || die "Si falla por permisos, ejecuta: sudo bash install"
  fi
}

verify() {
  command -v dtunnel >/dev/null || die "dtunnel no está en PATH tras la instalación"
  echo ""
  dtunnel version 2>/dev/null || true
  echo ""
  echo "Instalación completada."
  echo ""
  echo "  dtunnel --port 88080"
  echo ""
  echo "Documentación: https://dtunnel.desarrollado.com/docs.html"
  echo "Modo legacy con frpc: npm install -g @desarrollado/dtunnel -- y dtunnel --frp --port PUERTO"
}

main() {
  echo "dtunnel installer v${DTUNNEL_VERSION} (npm / túnel nativo)"
  need_node
  install_cli
  verify
}

main "$@"
