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

# ─────────────────────────────────────────────────────
# UPTYME Installer - Mac / Linux
# Usage: curl -sSf https://uptyme.spyweb.app/setup | bash
# ─────────────────────────────────────────────────────

INSTALL_DIR="${UPTYME_DIR:-./uptyme}"

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

info()  { printf "${CYAN}▸${NC} %s\n" "$1"; }
ok()    { printf "${GREEN}✓${NC} %s\n" "$1"; }
warn()  { printf "${YELLOW}!${NC} %s\n" "$1"; }
fail()  { printf "${RED}✗ %s${NC}\n" "$1"; exit 1; }

# ── Detect OS ─────────────────────────────────────────
detect_os() {
  case "$(uname -s)" in
    Linux*)  echo "linux" ;;
    Darwin*)
      case "$(uname -m)" in
        x86_64) echo "mac-intel" ;;
        arm64)  echo "mac-arm" ;;
        *)      fail "Unsupported Mac arch: $(uname -m)" ;;
      esac ;;
    *)       fail "Unsupported OS: $(uname -s). Use Windows PowerShell installer instead." ;;
  esac
}

# ── Main ──────────────────────────────────────────────
main() {
  printf "\n"
  printf "${BOLD}  UPTYME Installer${NC}\n"
  printf "  Website Uptime Monitoring\n"
  printf "\n"

  OS=$(detect_os)
  info "Detected OS: ${OS}"

  # Create install directory
  mkdir -p "$INSTALL_DIR"

  # ── Step 1: Download project release ────────────────
  info "Downloading UPTYME..."
  curl -fsSL -o "/tmp/uptyme-release.tar.gz" \
    "https://github.com/spyweb-app/uptyme/releases/latest/download/uptyme.tar.gz" \
    || fail "Failed to download UPTYME release"
  tar -xf "/tmp/uptyme-release.tar.gz" -C "$INSTALL_DIR" --strip-components=1
  rm -f "/tmp/uptyme-release.tar.gz"

  ok "UPTYME project files installed"

  # ── Step 2: Download SpyWeb binary (SQLite) ─────────
  local spyweb_url="https://dl.spyweb.app/${OS}-sql"

  info "Downloading SpyWeb binary (SQLite) for ${OS}..."

  local tmpbin
  tmpbin=$(mktemp -d)

  curl -fsSL -o "$tmpbin/spyweb.tar.gz" "$spyweb_url" || fail "Failed to download SpyWeb binary"
  tar -xf "$tmpbin/spyweb.tar.gz" -C "$tmpbin" --strip-components=1
  rm -f "$tmpbin/spyweb.tar.gz"

  # Move binaries
  mv "$tmpbin/spyweb" "$INSTALL_DIR/spyweb" || fail "Could not extract spyweb binary"
  chmod +x "$INSTALL_DIR/spyweb"

  if [ -f "$tmpbin/spyweb-tray" ]; then
    mv "$tmpbin/spyweb-tray" "$INSTALL_DIR/spyweb-tray"
    chmod +x "$INSTALL_DIR/spyweb-tray"
  fi

  rm -rf "$tmpbin"

  ok "SpyWeb binaries installed"

  # ── Step 3: Done ────────────────────────────────────
  printf "\n"
  printf "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
  printf "${GREEN}  Installation complete!${NC}\n"
  printf "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}\n"
  printf "\n"
  printf "  ${BOLD}cd %s && ./spyweb start${NC}\n" "$INSTALL_DIR"
  printf "\n"
  printf "  Then open ${CYAN}http://localhost:7979${NC}\n"
  printf "\n"
  printf "  Set an API key:\n"
  printf "    ${CYAN}SPYWEB_API_KEY=your-secret ./spyweb start${NC}\n"
  printf "\n"
}

main "$@"
