#!/bin/sh
# Momentic Skills installer.
# Source: https://momenticmarketing.com/install-skills.sh
#
# Downloads every skill listed in https://momenticmarketing.com/.well-known/agent-skills/index.json,
# verifies each SHA-256 against the index, and installs to ~/.claude/skills/<slug>/SKILL.md.
#
# Override install path:    CLAUDE_SKILLS_DIR=./skills sh install-skills.sh
# Override origin (testing): MOMENTIC_ORIGIN=http://localhost:8787 sh install-skills.sh
#
# Re-run anytime to update; skills are overwritten in place.

set -eu

ORIGIN="${MOMENTIC_ORIGIN:-https://momenticmarketing.com}"
INDEX_URL="${ORIGIN}/.well-known/agent-skills/index.json"
DEST="${CLAUDE_SKILLS_DIR:-${HOME}/.claude/skills}"

if command -v shasum >/dev/null 2>&1; then
  sha256() { shasum -a 256 "$1" | awk '{print $1}'; }
elif command -v sha256sum >/dev/null 2>&1; then
  sha256() { sha256sum "$1" | awk '{print $1}'; }
else
  echo "error: neither shasum nor sha256sum is available" >&2
  exit 1
fi

if command -v python3 >/dev/null 2>&1; then
  parse_index() {
    python3 -c 'import json,sys
for s in json.load(sys.stdin)["skills"]:
    print(s["name"], s["url"], s["sha256"])'
  }
elif command -v jq >/dev/null 2>&1; then
  parse_index() { jq -r '.skills[] | "\(.name) \(.url) \(.sha256)"'; }
else
  echo "error: install python3 or jq to parse the skills index" >&2
  exit 1
fi

mkdir -p "$DEST"
TMP=$(mktemp -d)
trap 'rm -rf "$TMP"' EXIT

printf 'Installing Momentic skills → %s\n\n' "$DEST"
curl -fsSL "$INDEX_URL" >"$TMP/index.json"
parse_index <"$TMP/index.json" >"$TMP/list.txt"

INSTALLED=0
while IFS=' ' read -r SLUG URL EXP; do
  [ -z "$SLUG" ] && continue
  printf '  %-26s ' "$SLUG"
  mkdir -p "$DEST/$SLUG"
  curl -fsSL "$URL" -o "$TMP/$SLUG.md"
  GOT=$(sha256 "$TMP/$SLUG.md")
  if [ "$GOT" = "$EXP" ]; then
    mv "$TMP/$SLUG.md" "$DEST/$SLUG/SKILL.md"
    printf 'ok\n'
    INSTALLED=$((INSTALLED + 1))
  else
    printf 'FAIL (sha mismatch: expected %s, got %s)\n' "$EXP" "$GOT" >&2
    exit 1
  fi
done <"$TMP/list.txt"

printf '\nInstalled %d skill(s) to %s\n' "$INSTALLED" "$DEST"
printf 'Restart your Claude Code session so the skills register.\n'
