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

VERSION="0.2.4"
SITE_URL="${TINDER_CLI_SITE_URL:-https://www.tindercli.com}"
DOWNLOAD_BASE_URL="${SITE_URL%/}/downloads/${VERSION}"
BIN_DIR="${TINDER_CLI_BIN_DIR:-$HOME/.local/bin}"
SKILL_NAME="tinder-cli"
SKILL_BASE_URL="${SITE_URL%/}/skills/${SKILL_NAME}"
SKIP_SKILL_INSTALL="${TINDER_CLI_SKIP_SKILL_INSTALL:-0}"
TMP_DIR="$(mktemp -d)"
INSTALLED_SKILL_DIRS=()

cleanup() {
  rm -rf "$TMP_DIR"
}

trap cleanup EXIT

need_cmd() {
  if ! command -v "$1" >/dev/null 2>&1; then
    echo "Missing required dependency: $1" >&2
    exit 1
  fi
}

sha256_file() {
  if command -v shasum >/dev/null 2>&1; then
    shasum -a 256 "$1" | awk '{print $1}'
    return
  fi
  if command -v sha256sum >/dev/null 2>&1; then
    sha256sum "$1" | awk '{print $1}'
    return
  fi
  echo "Missing required dependency: shasum or sha256sum" >&2
  exit 1
}

platform_os() {
  case "$(uname -s)" in
    Darwin) echo "darwin" ;;
    Linux) echo "linux" ;;
    *)
      echo "Unsupported operating system: $(uname -s)" >&2
      exit 1
      ;;
  esac
}

platform_arch() {
  case "$(uname -m)" in
    arm64|aarch64) echo "arm64" ;;
    x86_64|amd64) echo "amd64" ;;
    *)
      echo "Unsupported architecture: $(uname -m)" >&2
      exit 1
      ;;
  esac
}

need_cmd curl
need_cmd tar
need_cmd install

install_skill_target() {
  local target_dir="$1"
  local skill_md="$2"
  local openai_yaml="$3"

  mkdir -p "$target_dir"
  install -m 644 "$skill_md" "$target_dir/SKILL.md"
  if [[ -n "$openai_yaml" && -f "$openai_yaml" ]]; then
    mkdir -p "$target_dir/agents"
    install -m 644 "$openai_yaml" "$target_dir/agents/openai.yaml"
  fi
  INSTALLED_SKILL_DIRS+=("$target_dir")
}

install_tinder_cli_skill() {
  local skill_dir="$TMP_DIR/skill"
  local openai_yaml=""

  if [[ "$SKIP_SKILL_INSTALL" == "1" ]]; then
    return
  fi

  mkdir -p "$skill_dir"
  if ! curl -fsSL "$SKILL_BASE_URL/SKILL.md" -o "$skill_dir/SKILL.md"; then
    echo "Warning: could not download the Tinder CLI skill" >&2
    return
  fi

  if curl -fsSL "$SKILL_BASE_URL/agents/openai.yaml" -o "$skill_dir/openai.yaml" 2>/dev/null; then
    openai_yaml="$skill_dir/openai.yaml"
  fi

  install_skill_target "$HOME/.codex/skills/$SKILL_NAME" "$skill_dir/SKILL.md" "$openai_yaml"
  install_skill_target "$HOME/.claude/skills/$SKILL_NAME" "$skill_dir/SKILL.md" "$openai_yaml"
  if [[ -d "$HOME/.agents/skills" ]]; then
    install_skill_target "$HOME/.agents/skills/$SKILL_NAME" "$skill_dir/SKILL.md" "$openai_yaml"
  fi
}

os="$(platform_os)"
arch="$(platform_arch)"
archive_name="tinder-${os}-${arch}.tar.gz"
archive_url="${DOWNLOAD_BASE_URL}/${archive_name}"
checksums_url="${DOWNLOAD_BASE_URL}/checksums.txt"

mkdir -p "$BIN_DIR"

echo "Downloading Tinder CLI $VERSION for ${os}/${arch} ..."
curl -fsSL "$archive_url" -o "$TMP_DIR/$archive_name"
curl -fsSL "$checksums_url" -o "$TMP_DIR/checksums.txt"

expected_sha="$(awk -v name="$archive_name" '$2 == name {print $1}' "$TMP_DIR/checksums.txt")"
if [[ -z "$expected_sha" ]]; then
  echo "Could not find checksum for $archive_name" >&2
  exit 1
fi

actual_sha="$(sha256_file "$TMP_DIR/$archive_name")"
if [[ "$actual_sha" != "$expected_sha" ]]; then
  echo "Checksum mismatch for $archive_name" >&2
  exit 1
fi

tar -xzf "$TMP_DIR/$archive_name" -C "$TMP_DIR"
install -m 755 "$TMP_DIR/tinder" "$BIN_DIR/tinder"
install_tinder_cli_skill

cat <<MSG

Installed Tinder CLI v$VERSION to: $BIN_DIR/tinder

Next:
  1. Ensure $BIN_DIR is in your PATH
  2. Run: tinder login
  3. Connect Tinder: tinder auth login
  4. Check the release: tinder version
  5. Stay current: tinder update

MSG

if [[ ${#INSTALLED_SKILL_DIRS[@]} -gt 0 ]]; then
  echo "Installed the Tinder CLI skill:"
  for skill_dir in "${INSTALLED_SKILL_DIRS[@]}"; do
    echo "  - $skill_dir"
  done
  echo
fi
