#!/usr/bin/env bash
# list-skills - Show all available skill names without descriptions
# For Claude to quickly see what exists before searching
# Searches personal skills first, then core skills (personal shadows core)

set -euo pipefail

# Detect core skills directory (repo or installed location)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
if [[ "$SCRIPT_DIR" == *"/.claude/plugins/cache/"* ]]; then
    # Installed as plugin
    CORE_SKILLS_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
else
    # Running from repo
    CORE_SKILLS_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
fi

# Use PERSONAL_SUPERPOWERS_DIR if set, otherwise XDG_CONFIG_HOME/superpowers, otherwise ~/.config/superpowers
PERSONAL_SUPERPOWERS_DIR="${PERSONAL_SUPERPOWERS_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/superpowers}"
PERSONAL_SKILLS_DIR="${PERSONAL_SUPERPOWERS_DIR}/skills"

# Collect all skill paths with deduplication
declare -A seen_skills
all_skills=()

# Personal skills first (take precedence)
if [[ -d "$PERSONAL_SKILLS_DIR" ]]; then
    while IFS= read -r file; do
        skill_path="${file#$PERSONAL_SKILLS_DIR/}"
        skill_path="${skill_path%/SKILL.md}"
        if [[ -n "$skill_path" ]]; then
            seen_skills["$skill_path"]=1
            all_skills+=("$skill_path")
        fi
    done < <(find "$PERSONAL_SKILLS_DIR" -name "SKILL.md" -type f 2>/dev/null || true)
fi

# Core skills (only if not shadowed by personal)
while IFS= read -r file; do
    skill_path="${file#$CORE_SKILLS_DIR/}"
    skill_path="${skill_path%/SKILL.md}"
    if [[ -n "$skill_path" ]] && [[ -z "${seen_skills[$skill_path]:-}" ]]; then
        all_skills+=("$skill_path")
    fi
done < <(find "$CORE_SKILLS_DIR" -name "SKILL.md" -type f 2>/dev/null || true)

# Sort and output
printf "%s\n" "${all_skills[@]}" | sort

exit 0
