#!/bin/bash
set -euo pipefail

SKILLS_DIR="/usr/share/google-workspace-cli/skills"
DEFAULT_TARGET="${HOME}/.claude/skills"

usage() {
    cat <<'EOF'
Usage: gws-install-skills [OPTIONS] [SKILL...]

Symlink gws skills into a Claude Code (or compatible) skills directory.

Options:
  -t, --target DIR   Target directory (default: ~/.claude/skills)
  -a, --all          Install all available skills
  -l, --list         List available skills
  -r, --remove       Remove symlinks instead of creating them
  -h, --help         Show this help

Examples:
  gws-install-skills --all
  gws-install-skills gws-drive gws-gmail persona-exec-assistant
  gws-install-skills --target .claude/skills gws-calendar
  gws-install-skills --remove gws-drive
EOF
}

list_skills() {
    for d in "${SKILLS_DIR}"/*/; do
        basename "${d}"
    done
}

target="${DEFAULT_TARGET}"
remove=false
all=false
skills=()

while [[ $# -gt 0 ]]; do
    case "$1" in
        -t | --target) target="$2"; shift 2 ;;
        -a | --all) all=true; shift ;;
        -l | --list) list_skills; exit 0 ;;
        -r | --remove) remove=true; shift ;;
        -h | --help) usage; exit 0 ;;
        -*) echo "Unknown option: $1" >&2; usage >&2; exit 1 ;;
        *) skills+=("$1"); shift ;;
    esac
done

if ${all}; then
    mapfile -t skills < <(list_skills || true)
fi

if [[ ${#skills[@]} -eq 0 ]]; then
    echo "No skills specified. Use --all or list skill names." >&2
    echo "Available skills:" >&2
    list_skills >&2
    exit 1
fi

mkdir -p "${target}"

for skill in "${skills[@]}"; do
    src="${SKILLS_DIR}/${skill}"
    dest="${target}/${skill}"
    if ${remove}; then
        if [[ -L "${dest}" ]]; then
            rm "${dest}"
            echo "Removed ${skill}"
        else
            echo "Not a symlink, skipping: ${dest}" >&2
        fi
    else
        if [[ ! -d "${src}" ]]; then
            echo "Unknown skill: ${skill}" >&2
            continue
        fi
        ln -snf "${src}" "${dest}"
        echo "Installed ${skill}"
    fi
done
