#!/usr/bin/env bash
# ╔══════════════════════════════════════════════════════════════╗
# ║  Vanexa Agent — Universal Installer for macOS / Linux / WSL ║
# ║  Usage: curl -fsSL https://vanexa.app/install.sh | bash     ║
# ╚══════════════════════════════════════════════════════════════╝
set -euo pipefail

# ── Colors ──
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m' # No Color

# ── Banner ──
echo ""
echo -e "${CYAN}${BOLD}"
echo "  ██╗   ██╗ █████╗ ███╗   ██╗███████╗██╗  ██╗ █████╗ "
echo "  ██║   ██║██╔══██╗████╗  ██║██╔════╝╚██╗██╔╝██╔══██╗"
echo "  ██║   ██║███████║██╔██╗ ██║█████╗   ╚███╔╝ ███████║"
echo "  ╚██╗ ██╔╝██╔══██║██║╚██╗██║██╔══╝   ██╔██╗ ██╔══██║"
echo "   ╚████╔╝ ██║  ██║██║ ╚████║███████╗██╔╝ ╚██╗██║  ██║"
echo "    ╚═══╝  ╚═╝  ╚═╝╚═╝  ╚═══╝╚══════╝╚═╝   ╚═╝╚═╝  ╚═╝"
echo -e "${NC}"
echo -e "${BOLD}  Sovereign AI Agent — Zero-Friction Installer${NC}"
echo ""

# ── Detect OS ──
detect_os() {
  local os=""
  local arch=""

  case "$(uname -s)" in
    Darwin)  os="macos" ;;
    Linux)
      if grep -qi microsoft /proc/version 2>/dev/null; then
        os="wsl"
      else
        os="linux"
      fi
      ;;
    *)
      echo -e "${RED}✗ Unsupported OS: $(uname -s)${NC}"
      echo "  Please use the PowerShell installer for Windows:"
      echo "  irm https://vanexa.app/install.ps1 | iex"
      exit 1
      ;;
  esac

  case "$(uname -m)" in
    x86_64|amd64) arch="x64" ;;
    arm64|aarch64) arch="arm64" ;;
    *)
      echo -e "${YELLOW}⚠ Unknown architecture: $(uname -m). Proceeding with default.${NC}"
      arch="x64"
      ;;
  esac

  echo -e "${BLUE}→ Detected:${NC} ${BOLD}${os}${NC} (${arch})"
  OS="$os"
  ARCH="$arch"
}

# ── Check if a command exists ──
has() {
  command -v "$1" &>/dev/null
}

# ── Install Node.js via nvm (safest cross-platform method) ──
install_node() {
  local NODE_LTS_VERSION="22"  # Current LTS major

  echo -e "${YELLOW}⚠ Node.js not found.${NC} Installing Node.js ${NODE_LTS_VERSION} LTS..."
  echo ""

  if has nvm; then
    echo -e "${BLUE}→ nvm detected. Installing Node.js via nvm...${NC}"
    nvm install "$NODE_LTS_VERSION"
    nvm use "$NODE_LTS_VERSION"
  elif has fnm; then
    echo -e "${BLUE}→ fnm detected. Installing Node.js via fnm...${NC}"
    fnm install "$NODE_LTS_VERSION"
    fnm use "$NODE_LTS_VERSION"
  else
    echo -e "${BLUE}→ Installing nvm (Node Version Manager)...${NC}"
    
    # Install nvm
    export NVM_DIR="${HOME}/.nvm"
    curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

    # Load nvm immediately
    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

    echo -e "${BLUE}→ Installing Node.js ${NODE_LTS_VERSION} LTS via nvm...${NC}"
    nvm install "$NODE_LTS_VERSION"
    nvm use "$NODE_LTS_VERSION"
  fi

  # Verify
  if has node; then
    echo -e "${GREEN}✓ Node.js $(node --version) installed successfully.${NC}"
  else
    echo -e "${RED}✗ Node.js installation failed.${NC}"
    echo "  Please install Node.js manually from: https://nodejs.org"
    exit 1
  fi
}

# ── Install Vanexa Agent ──
install_vanexa() {
  echo ""
  echo -e "${BLUE}→ Installing Vanexa Agent globally...${NC}"
  
  npm install -g vanexa-agent@latest 2>&1

  if has vanexa-agent; then
    echo -e "${GREEN}✓ Vanexa Agent $(vanexa-agent --version 2>/dev/null || echo 'latest') installed.${NC}"
  else
    # Sometimes npm global bin is not in PATH
    local NPM_BIN
    NPM_BIN="$(npm bin -g 2>/dev/null || echo "")"
    if [ -n "$NPM_BIN" ] && [ -f "$NPM_BIN/vanexa-agent" ]; then
      echo -e "${YELLOW}⚠ Vanexa Agent installed but not in PATH.${NC}"
      echo -e "  Add this to your shell profile (~/.bashrc or ~/.zshrc):"
      echo -e "  ${BOLD}export PATH=\"$NPM_BIN:\$PATH\"${NC}"
    else
      echo -e "${RED}✗ Installation may have failed. Try:${NC}"
      echo "  sudo npm install -g vanexa-agent@latest"
      exit 1
    fi
  fi
}

# ── Main ──
main() {
  detect_os

  echo ""

  # Step 1: Check Node.js
  if has node; then
    local NODE_VERSION
    NODE_VERSION="$(node --version)"
    local NODE_MAJOR="${NODE_VERSION#v}"
    NODE_MAJOR="${NODE_MAJOR%%.*}"

    if [ "$NODE_MAJOR" -lt 18 ]; then
      echo -e "${YELLOW}⚠ Node.js ${NODE_VERSION} is too old (minimum: v18).${NC}"
      install_node
    else
      echo -e "${GREEN}✓ Node.js ${NODE_VERSION} detected.${NC}"
    fi
  else
    install_node
  fi

  # Step 2: Check npm
  if ! has npm; then
    echo -e "${RED}✗ npm not found even after Node.js installation.${NC}"
    exit 1
  fi
  echo -e "${GREEN}✓ npm $(npm --version) detected.${NC}"

  # Step 3: Install Vanexa Agent
  install_vanexa

  # ── Success ──
  echo ""
  echo -e "${GREEN}${BOLD}══════════════════════════════════════════════════${NC}"
  echo -e "${GREEN}${BOLD}  ✅ Vanexa Agent installed successfully!${NC}"
  echo -e "${GREEN}${BOLD}══════════════════════════════════════════════════${NC}"
  echo ""
  echo -e "  ${BOLD}Next steps:${NC}"
  echo ""
  echo -e "  1. Open the Vanexa app on your phone"
  echo -e "  2. Tap the ${CYAN}${BOLD}Agent${NC} tab"
  echo -e "  3. Run this command on your computer:"
  echo ""
  echo -e "     ${CYAN}${BOLD}vanexa-agent pair${NC}"
  echo ""
  echo -e "  4. Enter the pairing code from your phone"
  echo ""
  echo -e "  ${YELLOW}Tip:${NC} To start the agent daemon later, run:"
  echo -e "     ${CYAN}vanexa-agent start${NC}"
  echo ""
}

main "$@"
