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

BASE_URL="https://get.rokk.dev"
VERSION="1.0.0-48"
INSTALL_DIR="$HOME/.bin"
BINARY_NAME="rokk-dev"

detect_platform() {
  local os arch
  os="$(uname -s)"
  arch="$(uname -m)"

  case "$os" in
    Darwin)
      case "$arch" in
        arm64) echo "darwin-arm64" ;;
        x86_64) echo "darwin-amd64" ;;
        *) echo "Unsupported macOS architecture: $arch" >&2; exit 1 ;;
      esac
      ;;
    Linux)
      case "$arch" in
        x86_64) echo "linux-amd64" ;;
        aarch64) echo "linux-arm64" ;;
        *) echo "Unsupported Linux architecture: $arch" >&2; exit 1 ;;
      esac
      ;;
    *) echo "Unsupported OS: $os" >&2; exit 1 ;;
  esac
}

add_to_path() {
  local shell_name rc_file line
  line='export PATH="$HOME/.bin:$PATH"'

  # Already in PATH
  if echo ":$PATH:" | grep -q ":$INSTALL_DIR:"; then
    return
  fi

  shell_name="$(basename "$SHELL")"
  case "$shell_name" in
    zsh)  rc_file="$HOME/.zshrc" ;;
    bash)
      if [ -f "$HOME/.bash_profile" ]; then
        rc_file="$HOME/.bash_profile"
      else
        rc_file="$HOME/.bashrc"
      fi
      ;;
    *) rc_file="$HOME/.profile" ;;
  esac

  if [ -f "$rc_file" ] && grep -qF '.bin' "$rc_file"; then
    return
  fi

  echo "" >> "$rc_file"
  echo "# Added by rokk-dev installer" >> "$rc_file"
  echo "$line" >> "$rc_file"
  echo "Added $INSTALL_DIR to PATH in $rc_file"
  echo "Run 'source $rc_file' or open a new terminal to use rokk-dev"
}

main() {
  local platform url

  platform="$(detect_platform)"
  url="$BASE_URL/v/$VERSION/$BINARY_NAME-$platform"

  echo "Installing rokk-dev ($platform)..."

  mkdir -p "$INSTALL_DIR"

  if command -v curl &>/dev/null; then
    curl -fsSL "$url" -o "$INSTALL_DIR/$BINARY_NAME"
  elif command -v wget &>/dev/null; then
    wget -qO "$INSTALL_DIR/$BINARY_NAME" "$url"
  else
    echo "Error: curl or wget is required" >&2
    exit 1
  fi

  chmod +x "$INSTALL_DIR/$BINARY_NAME"

  add_to_path

  echo "rokk-dev installed to $INSTALL_DIR/$BINARY_NAME"
}

main
