#!/usr/bin/env bash
# Install transcript-summary into agent skill folders.
# Local:  ./install.sh [agents...]
# Remote: curl -fsSL https://raw.githubusercontent.com/saimakramai11/Ai11-Transcript-Summary-Skill/develop/install.sh | bash
set -euo pipefail

NAME="transcript-summary"
REPO="saimakramai11/Ai11-Transcript-Summary-Skill"
REF="${TRANSCRIPT_SUMMARY_REF:-develop}"
CLEANUP=""

cleanup() {
  if [[ -n "$CLEANUP" && -d "$CLEANUP" ]]; then
    rm -rf "$CLEANUP"
  fi
}
trap cleanup EXIT

if [[ ! -d "${HOME:-}" ]]; then
  echo "ERROR: HOME is not set." >&2
  exit 1
fi

if [[ $# -eq 0 ]]; then
  if [[ -n "${TRANSCRIPT_SUMMARY_AGENTS:-}" ]]; then
    # shellcheck disable=SC2206
    AGENTS=($TRANSCRIPT_SUMMARY_AGENTS)
  else
    AGENTS=(grok claude copilot gemini openai agents)
  fi
else
  AGENTS=("$@")
fi

dest_for() {
  case "$1" in
    grok) echo "$HOME/.grok/skills/$NAME" ;;
    claude) echo "$HOME/.claude/skills/$NAME" ;;
    copilot) echo "$HOME/.copilot/skills/$NAME" ;;
    gemini) echo "$HOME/.gemini/skills/$NAME" ;;
    openai|codex) echo "$HOME/.codex/skills/$NAME" ;;
    agents) echo "$HOME/.agents/skills/$NAME" ;;
    *)
      echo "ERROR: Unknown agent \"$1\". Expected: grok claude copilot gemini openai codex agents" >&2
      return 1
      ;;
  esac
}

local_src=""
if [[ -n "${BASH_SOURCE[0]:-}" && "${BASH_SOURCE[0]}" != "-" && "${BASH_SOURCE[0]}" != "bash" && "${BASH_SOURCE[0]}" != "sh" ]]; then
  _dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd || true)"
  if [[ -n "$_dir" && -f "$_dir/SKILL.md" ]]; then
    local_src="$_dir"
  fi
fi

if [[ -n "$local_src" ]]; then
  SRC="$local_src"
else
  CLEANUP="$(mktemp -d)"
  tarball="$CLEANUP/skill.tar.gz"
  url="https://codeload.github.com/${REPO}/tar.gz/refs/heads/${REF}"
  echo "Downloading ${REPO}@${REF}..."
  if command -v curl >/dev/null 2>&1; then
    curl -fsSL "$url" -o "$tarball"
  elif command -v wget >/dev/null 2>&1; then
    wget -qO "$tarball" "$url"
  else
    echo "ERROR: Need curl or wget to download the skill." >&2
    exit 1
  fi
  tar -xzf "$tarball" -C "$CLEANUP"
  SRC=""
  for d in "$CLEANUP"/*; do
    if [[ -d "$d" && -f "$d/SKILL.md" ]]; then
      SRC="$d"
      break
    fi
  done
  if [[ -z "$SRC" ]]; then
    echo "ERROR: Downloaded archive did not contain SKILL.md. Is ${REPO} public?" >&2
    exit 1
  fi
fi

if [[ ! -f "$SRC/SKILL.md" ]]; then
  echo "ERROR: SKILL.md not found in $SRC" >&2
  exit 1
fi

copy_skill() {
  local dest="$1"
  mkdir -p "$(dirname "$dest")"
  rm -rf "$dest"
  mkdir -p "$dest"
  tar -C "$SRC" --exclude=".git" --exclude=".vscode" --exclude="node_modules" --exclude="__pycache__" -cf - . | tar -C "$dest" -xf -
}

failed=0
for agent in "${AGENTS[@]}"; do
  dest="$(dest_for "$agent")" || { failed=1; continue; }
  copy_skill "$dest"
  echo "Installed $agent: $dest"
done

if [[ "$failed" -ne 0 ]]; then
  exit 1
fi

echo
echo "Done. Start a new agent session, then run /transcript-summary or /skills."
