#!/usr/bin/env sh
#
# skill-hub · 邱懿武 Skill Hub CLI shim
# Spec: https://skill.qiuyiwu.com/install/skill-hub.md
#
set -e

HUB="${SKILL_HUB_URL:-https://skill.qiuyiwu.com}"
DEST="${CLAUDE_SKILLS_DIR:-$HOME/.claude/skills}"
VERSION="0.1.0"

color() { printf "\033[%sm%s\033[0m" "$1" "$2"; }
bold()  { color "1" "$1"; }
green() { color "32" "$1"; }
red()   { color "31" "$1"; }
gray()  { color "90" "$1"; }
cyan()  { color "36" "$1"; }

usage() {
  echo "$(bold 'skill-hub') v$VERSION · 邱懿武 Skill Hub CLI"
  echo ""
  echo "用法："
  echo "  skill-hub $(bold 'list')              已装的 skill"
  echo "  skill-hub $(bold 'search') <kw>       在 manifest 里搜（名称/触发词/简介）"
  echo "  skill-hub $(bold 'install') <slug>    装一个 skill"
  echo "  skill-hub $(bold 'install') <s1> <s2> 批量装"
  echo "  skill-hub $(bold 'uninstall') <slug>  卸载"
  echo "  skill-hub $(bold 'update')            更新所有已装 skill"
  echo "  skill-hub $(bold 'info') <slug>       看 skill 元数据"
  echo "  skill-hub $(bold 'trigger') <phrase>  反查：这句话该用哪个 skill？"
  echo "  skill-hub $(bold 'manifest')          拉一份完整 manifest"
  echo "  skill-hub $(bold 'open') <slug>       浏览器打开详情页"
  echo "  skill-hub $(bold 'version')           显示版本"
  echo ""
  echo "环境："
  echo "  CLAUDE_SKILLS_DIR  装到哪（默认 \$HOME/.claude/skills）"
  echo "  SKILL_HUB_URL      registry URL（默认 ${HUB}）"
  echo ""
  echo "Spec: ${HUB}/install/skill-hub.md"
  exit 0
}

[ $# -eq 0 ] && usage
CMD="$1"; shift

# ── 子命令实现 ──
case "$CMD" in
  -h|--help|help) usage ;;

  version|--version|-v)
    echo "skill-hub $VERSION"
    ;;

  list)
    if [ ! -d "$DEST" ]; then
      echo "$(gray 'no skills installed at') $DEST"
      exit 0
    fi
    echo "$(bold '本机已装 skill:')   $(gray "($DEST)")"
    echo ""
    found=0
    for d in "$DEST"/*/; do
      [ -d "$d" ] || continue
      slug=$(basename "$d")
      if [ -f "$d/SKILL.md" ]; then
        # extract description from frontmatter or first heading
        desc=$(grep -m1 '^description:' "$d/SKILL.md" 2>/dev/null | sed 's/description:[[:space:]]*//' | cut -c1-70)
        [ -z "$desc" ] && desc=$(grep -m1 '^# ' "$d/SKILL.md" 2>/dev/null | sed 's/^# //' | cut -c1-70)
        printf "  %s  %s\n" "$(green "$slug")" "$(gray "$desc")"
        found=$((found + 1))
      fi
    done
    [ "$found" = "0" ] && echo "  $(gray '(none)')"
    echo ""
    echo "$(gray "$found skill(s) installed")"
    ;;

  search)
    KW="$1"
    [ -z "$KW" ] && { echo "$(red '✗ 给个关键词')"; exit 1; }
    command -v jq >/dev/null 2>&1 || { echo "$(red '✗ 需要 jq')"; exit 1; }
    curl -fsSL "$HUB/api/v1/skills.json" | jq -r \
      --arg kw "$KW" '
      .skills[] |
      select(
        (.id | contains($kw)) or
        (.name | contains($kw)) or
        (.summary | contains($kw)) or
        ((.triggers // []) | tostring | contains($kw))
      ) |
      "\(.id)\t\(.name)\t\(.summary)"
    ' | while IFS="$(printf '\t')" read -r id name summary; do
      printf "  %s\n    %s\n    %s\n\n" "$(green "$id")" "$(bold "$name")" "$(gray "$summary")"
    done
    ;;

  install)
    [ $# -eq 0 ] && { echo "$(red '✗ 给个 skill slug')"; exit 1; }
    for s in "$@"; do
      echo ""
      curl -fsSL "$HUB/install.sh" | sh -s -- --no-cli "$s"
    done
    ;;

  uninstall|rm|remove)
    SLUG="$1"
    [ -z "$SLUG" ] && { echo "$(red '✗ 给个 slug')"; exit 1; }
    if [ -d "$DEST/$SLUG" ]; then
      rm -rf "$DEST/$SLUG"
      echo "$(green '✓') 已卸载 $(bold "$SLUG")"
    else
      echo "$(gray "$DEST/$SLUG not found")"
      exit 1
    fi
    ;;

  update)
    if [ ! -d "$DEST" ]; then
      echo "$(gray 'nothing to update')"; exit 0
    fi
    for d in "$DEST"/*/; do
      [ -d "$d" ] || continue
      slug=$(basename "$d")
      [ -f "$d/SKILL.md" ] || continue
      echo "→ updating $(bold "$slug")"
      curl -fsSL "$HUB/install.sh" | sh -s -- --no-cli "$slug" >/dev/null 2>&1 && \
        echo "  $(green '✓') updated" || \
        echo "  $(red '✗') failed"
    done
    ;;

  info)
    SLUG="$1"
    [ -z "$SLUG" ] && { echo "$(red '✗ 给个 slug')"; exit 1; }
    command -v jq >/dev/null 2>&1 || { echo "$(red '✗ 需要 jq')"; exit 1; }
    curl -fsSL "$HUB/api/v1/skills.json" | jq --arg s "$SLUG" '.skills[] | select(.id == $s)'
    ;;

  trigger|match)
    PHRASE="$*"
    [ -z "$PHRASE" ] && { echo "$(red '✗ 给个短语')"; exit 1; }
    command -v jq >/dev/null 2>&1 || { echo "$(red '✗ 需要 jq')"; exit 1; }
    echo "$(gray '查询:') $PHRASE"
    echo ""
    curl -fsSL "$HUB/api/v1/skills.json" | jq -r \
      --arg q "$PHRASE" '
      .skills[] |
      select((.triggers // []) | map(. as $t | $q | contains($t)) | any) |
      "\(.id)\t\(.name)"
    ' | while IFS="$(printf '\t')" read -r id name; do
      printf "  %s  %s\n" "$(green "$id")" "$(gray "$name")"
    done
    ;;

  manifest|json)
    curl -fsSL "$HUB/api/v1/skills.json"
    ;;

  open)
    SLUG="$1"
    URL="${HUB}/s/${SLUG}/"
    [ -z "$SLUG" ] && URL="$HUB"
    case "$(uname -s)" in
      Darwin*) open "$URL" ;;
      Linux*)  xdg-open "$URL" 2>/dev/null || echo "$URL" ;;
      *)       echo "$URL" ;;
    esac
    ;;

  *)
    echo "$(red "✗ unknown command:") $CMD"
    echo ""
    usage
    ;;
esac
