#!/usr/bin/env bash
# imagineers CLI installer
# Usage: curl -fsSL https://cli.imagineers.dev/install.sh | bash
#
# Env:
#   IMAGINEERS_INSTALL_DIR   install location (default: $HOME/.imagineers/bin)
#   IMAGINEERS_VERSION       version to install (default: latest)
#   IMAGINEERS_REPO          GitHub repo (default: KrishnB/imagineers-cli)
#   IMAGINEERS_NO_MODIFY_PATH=1  skip writing to shell rc files

set -euo pipefail

REPO="${IMAGINEERS_REPO:-KrishnB/imagineers-cli}"
VERSION="${IMAGINEERS_VERSION:-latest}"
INSTALL_DIR="${IMAGINEERS_INSTALL_DIR:-$HOME/.imagineers/bin}"
BIN_NAME="imagineers"

say()  { printf '\033[1m%s\033[0m\n' "$*"; }
hint() { printf '\033[2m%s\033[0m\n' "$*"; }
die()  { printf '\033[31m%s\033[0m\n' "$*" >&2; exit 1; }

detect_target() {
  local os arch
  os="$(uname -s)"; arch="$(uname -m)"
  case "$os" in
    Darwin)
      case "$arch" in
        arm64|aarch64) echo "aarch64-apple-darwin" ;;
        x86_64) echo "x86_64-apple-darwin" ;;
        *) die "unsupported macOS arch: $arch" ;;
      esac ;;
    Linux)
      case "$arch" in
        aarch64|arm64) echo "aarch64-unknown-linux-gnu" ;;
        x86_64|amd64) echo "x86_64-unknown-linux-gnu" ;;
        *) die "unsupported Linux arch: $arch" ;;
      esac ;;
    MINGW*|MSYS*|CYGWIN*|Windows_NT)
      die "Windows detected. In PowerShell run:
  iwr -useb https://cli.imagineers.dev/install.ps1 | iex" ;;
    *) die "unsupported OS: $os. Manual install: https://github.com/$REPO/releases" ;;
  esac
}

command -v curl >/dev/null 2>&1 || die "missing required tool: curl"
command -v tar  >/dev/null 2>&1 || die "missing required tool: tar"

target="$(detect_target)"
say "imagineers CLI installer"
hint "  target:  $target"
hint "  install: $INSTALL_DIR"

if [ "$VERSION" = "latest" ]; then
  url="https://github.com/$REPO/releases/latest/download/imagineers-${target}.tar.gz"
else
  url="https://github.com/$REPO/releases/download/${VERSION}/imagineers-${target}.tar.gz"
fi
hint "  url:     $url"
echo

mkdir -p "$INSTALL_DIR"
tmp="$(mktemp -d)"; trap 'rm -rf "$tmp"' EXIT
say "Downloading..."
curl -fsSL "$url" -o "$tmp/imagineers.tar.gz" || die "download failed: $url"
say "Extracting..."
tar -xzf "$tmp/imagineers.tar.gz" -C "$tmp"
install -m 0755 "$tmp/$BIN_NAME" "$INSTALL_DIR/$BIN_NAME"
say "Installed $BIN_NAME to $INSTALL_DIR."

case ":$PATH:" in
  *":$INSTALL_DIR:"*) ;;
  *)
    if [ "${IMAGINEERS_NO_MODIFY_PATH:-0}" != "1" ]; then
      line="export PATH=\"$INSTALL_DIR:\$PATH\""
      for rc in "$HOME/.zshrc" "$HOME/.bashrc"; do
        [ -f "$rc" ] && ! grep -qF "$INSTALL_DIR" "$rc" && printf '\n# imagineers CLI\n%s\n' "$line" >> "$rc"
      done
      hint "Added $INSTALL_DIR to your PATH. Restart your shell or: $line"
    else
      hint "Add to PATH: export PATH=\"$INSTALL_DIR:\$PATH\""
    fi ;;
esac
echo
say "Done. Run: imagineers --help"
