#!/usr/bin/env bash
# Geoa CVE Guard for Claude Code: adds the geoa-cve MCP server and installs the /geoa-cve command + skill.
#   bash install.sh                      # user-wide: ~/.claude/commands, ~/.claude/skills, `claude mcp add --scope user`
#   bash install.sh --project DIR        # only for DIR: DIR/.claude/{commands,skills}, `claude mcp add --scope local` run in DIR
#   bash install.sh --dry-run            # print what would happen, change nothing
#   bash install.sh --uninstall [--project DIR]
# Env: GEOA_CVE_URL (MCP endpoint, default below), GEOA_CVE_NO_MCP=1 (skip `claude mcp add`).
set -euo pipefail
BASE="https://cve.geoa.io"
URL="${GEOA_CVE_URL:-$BASE/mcp}"
SRC_BASE="${URL%/mcp}/plugin"
DRY=0; UNINSTALL=0; PROJECT=""
while [ $# -gt 0 ]; do
  case "$1" in
    --dry-run) DRY=1 ;;
    --uninstall) UNINSTALL=1 ;;
    --project) PROJECT="${2:?--project needs a directory}"; shift ;;
    --url) URL="${2:?--url needs a value}"; SRC_BASE="${URL%/mcp}/plugin"; shift ;;
    -h|--help) sed -n '2,8p' "$0"; exit 0 ;;
    *) echo "unknown option: $1" >&2; exit 2 ;;
  esac
  shift
done
case "$URL" in http://*|https://*) ;; *) echo "GEOA_CVE_URL must be http(s)://…/mcp" >&2; exit 2 ;; esac
if [ -n "$PROJECT" ]; then
  PROJECT="$(cd "$PROJECT" && pwd)"; DEST="$PROJECT/.claude"; SCOPE=local
else
  DEST="${CLAUDE_CONFIG_DIR:-$HOME/.claude}"; SCOPE=user
fi
HERE="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" 2>/dev/null && pwd || echo)"
run() { if [ "$DRY" = 1 ]; then printf 'would run:'; printf ' %q' "$@"; echo; else "$@"; fi; }
fetch() { # fetch <rel> <dest>: local copy next to this script, else download from the instance
  if [ -n "$HERE" ] && [ -f "$HERE/$1" ]; then run cp "$HERE/$1" "$2"
  else run curl -fsS --proto '=http,https' --max-time 20 -o "$2" "$SRC_BASE/$1"; fi
}
in_project() { if [ -n "$PROJECT" ]; then (cd "$PROJECT" && "$@"); else "$@"; fi; }

if [ "$UNINSTALL" = 1 ]; then
  run rm -f "$DEST/commands/geoa-cve.md"
  run rm -rf "$DEST/skills/geoa-cve"
  if [ "${GEOA_CVE_NO_MCP:-0}" != 1 ] && command -v claude >/dev/null 2>&1; then
    if [ "$DRY" = 1 ]; then run claude mcp remove --scope "$SCOPE" geoa-cve; else in_project claude mcp remove --scope "$SCOPE" geoa-cve >/dev/null 2>&1 || true; fi
  fi
  echo "geoa-cve removed from $DEST"; exit 0
fi

run mkdir -p "$DEST/commands" "$DEST/skills/geoa-cve"
fetch commands/geoa-cve.md "$DEST/commands/geoa-cve.md"
fetch skills/geoa-cve/SKILL.md "$DEST/skills/geoa-cve/SKILL.md"
if [ "${GEOA_CVE_NO_MCP:-0}" != 1 ]; then
  if command -v claude >/dev/null 2>&1; then
    if [ "$DRY" = 1 ]; then run claude mcp add --scope "$SCOPE" --transport http geoa-cve "$URL"
    else
      in_project claude mcp remove --scope "$SCOPE" geoa-cve >/dev/null 2>&1 || true
      in_project claude mcp add --scope "$SCOPE" --transport http geoa-cve "$URL"
    fi
  else
    echo "claude CLI not found: add the server yourself with: claude mcp add --transport http geoa-cve $URL" >&2
  fi
fi
echo "geoa-cve installed: /geoa-cve command + skill in $DEST, MCP server $URL ($SCOPE scope)."
echo "Try: /geoa-cve CVE-2021-44228   ·   /geoa-cve check"
