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

BOLD='\033[1m'
DIM='\033[2m'
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[0;33m'
NC='\033[0m'

BASE="https://nostrix-finance.vercel.app"
INSTALL_DIR="${HOME}/.local/bin"
TARGET="nf"

# ── detect platform ──
OS="$(uname -s)"
ARCH="$(uname -m)"

case "$OS" in
  Darwin)
    case "$ARCH" in
      arm64)  BINARY="nf-free-macos-arm64" ;;
      x86_64) BINARY="nf-free-macos-intel"  ;;
      *)      echo -e "  ${RED}Unsupported architecture: $ARCH${NC}"; exit 1 ;;
    esac
    ;;
  Linux)
    case "$ARCH" in
      x86_64|aarch64|arm64) BINARY="nf-free-linux" ;;
      *)      echo -e "  ${RED}Unsupported architecture: $ARCH${NC}"; exit 1 ;;
    esac
    ;;
  CYGWIN*|MINGW*|MSYS*)
    BINARY="nf-free-win.exe"
    TARGET="nf.exe"
    INSTALL_DIR="${HOME}/.local/bin"
    ;;
  *)
    echo -e "  ${RED}Unsupported OS: $OS${NC}"; exit 1 ;;
esac

echo ""
echo -e "  ${BOLD}Nostrix CLI${NC} ${DIM}— installing (${BINARY})${NC}"
echo ""

# ── download with retry ──
URL="${BASE}/${BINARY}"
TMP="$(mktemp)"
trap "rm -f ${TMP}" EXIT

HTTP=""
for attempt in 1 2 3; do
  HTTP="$(curl -fsSL -w '%{http_code}' --connect-timeout 10 --max-time 120 "${URL}" -o "${TMP}" 2>&1 || true)"
  if [ "${HTTP}" = "200" ]; then
    break
  fi
  if [ $attempt -lt 3 ]; then
    echo -e "  ${YELLOW}Retrying download (attempt $attempt)...${NC}"
    sleep 2
  fi
done

if [ "${HTTP}" != "200" ]; then
  echo -e "  ${RED}Download failed (HTTP ${HTTP})${NC}"
  echo "  ${URL}"
  echo -e "  ${DIM}Try direct download: ${URL}${NC}"
  exit 1
fi

SIZE="$(du -h "${TMP}" | cut -f1)"
echo -e "  ${GREEN}✓${NC} Downloaded ${SIZE}"

# macOS: remove Gatekeeper quarantine
if [ "${OS}" = "Darwin" ]; then
  xattr -d com.apple.quarantine "${TMP}" 2>/dev/null || true
fi

chmod +x "${TMP}"

# ── download C++ engine (optional) ──
TMP_ENG="$(mktemp)"
ENGINE_INSTALLED=false
ENGINE_HTTP="$(curl -fsSL -w '%{http_code}' --connect-timeout 10 --max-time 60 "${BASE}/nengine" -o "${TMP_ENG}" 2>&1 || true)"
if [ "${ENGINE_HTTP}" = "200" ]; then
  chmod +x "${TMP_ENG}"
  ENGINE_INSTALLED=true
else
  rm -f "${TMP_ENG}"
fi

# ── install ──
mkdir -p "${INSTALL_DIR}"

# Remove old version if exists
rm -f "${INSTALL_DIR}/${TARGET}" "${INSTALL_DIR}/nengine"

mv -f "${TMP}" "${INSTALL_DIR}/${TARGET}"
echo -e "  ${GREEN}✓${NC} Installed to ${INSTALL_DIR}/${TARGET}"

if [ "${ENGINE_INSTALLED}" = true ]; then
  mv -f "${TMP_ENG}" "${INSTALL_DIR}/nengine"
  echo -e "  ${GREEN}✓${NC} Scoring engine installed (${INSTALL_DIR}/nengine)"
fi

# ── create clickable wrapper for macOS ──
if [ "${OS}" = "Darwin" ]; then
  WRAPPER="${INSTALL_DIR}/nf.command"
  cat > "${WRAPPER}" << 'WRAPEOF'
#!/usr/bin/env bash
cd "$(dirname "$0")"
clear
echo ""
echo "  Nostrix CLI"
echo "  ────────────"
echo "  Type 'help' for commands, Ctrl+C or 'exit' to quit."
echo ""
exec "${HOME}/.local/bin/nf"
WRAPEOF
  chmod +x "${WRAPPER}"
  echo -e "  ${GREEN}✓${NC} Double-click launcher: ${WRAPPER}"
fi

# ── PATH ──
IN_PATH=false
case ":${PATH}:" in
  *:"${INSTALL_DIR}":*) IN_PATH=true ;;
esac

if [ "${IN_PATH}" = false ]; then
  SHELL_RC=""
  case "${SHELL}" in
    */zsh) SHELL_RC="${HOME}/.zshrc" ;;
    */bash) SHELL_RC="${HOME}/.bashrc" ;;
    */fish) SHELL_RC="${HOME}/.config/fish/config.fish" ;;
  esac

  if [ -n "${SHELL_RC}" ]; then
    echo "" >> "${SHELL_RC}"
    echo "# Nostrix CLI" >> "${SHELL_RC}"
    echo "export PATH=\"\${PATH}:${INSTALL_DIR}\"" >> "${SHELL_RC}"
    echo -e "  ${GREEN}✓${NC} Added to PATH in ${SHELL_RC}"
    echo -e "  ${DIM}→ Run: source ${SHELL_RC}${NC}"
  else
    echo -e "  ${DIM}→ Add ${INSTALL_DIR} to your PATH manually${NC}"
  fi
fi

echo ""
echo -e "  ${GREEN}${BOLD}Nostrix CLI installed!${NC}"
echo ""
echo -e "  ${DIM}Run it:${NC}"
echo -e "    ${BOLD}nf${NC}                   ${DIM}# start interactive REPL${NC}"
echo -e "    ${BOLD}nf aa AAPL${NC}           ${DIM}# 10-layer analysis${NC}"
if [ "${OS}" = "Darwin" ]; then
  echo -e "    ${DIM}or double-click: ${WRAPPER}${NC}"
fi
echo ""
echo -e "  ${DIM}Re-run this script to update.${NC}"
echo ""
