#!/usr/bin/env bash
#
# Stryx Skills installer — macOS / Linux
# Installs all 20 Stryx Labs skills into ~/.claude/skills/
#
# Stryx Labs · proprietary · binaries hosted by Stryx Labs at dist.stryxlabs.com
# Free for personal and commercial use. License: https://stryxlabs.com/LICENSE.txt
#
# Usage:
#   curl -fsSL https://stryxlabs.com/install-skills.sh | bash
#
# Environment variable overrides:
#   STRYX_SKILLS_VERSION  — pin to a specific version (default: v1.0.0)
#   STRYX_SKILLS_DIR      — install directory (default: ~/.claude/skills)
#   STRYX_SKILL           — install ONE specific skill instead of all (e.g., "stryx-3d-web-design")
#

set -euo pipefail

# CONFIG
VERSION="${STRYX_SKILLS_VERSION:-v1.0.0}"
INSTALL_DIR="${STRYX_SKILLS_DIR:-$HOME/.claude/skills}"
SINGLE_SKILL="${STRYX_SKILL:-}"
DIST_BASE="https://dist.stryxlabs.com/skills"

# PRETTY PRINT
ok()    { printf "  \033[32m✓\033[0m %s\n" "$1"; }
info()  { printf "  \033[36m·\033[0m %s\n" "$1"; }
warn()  { printf "  \033[33m!\033[0m %s\n" "$1"; }
fail()  { printf "  \033[31m✘\033[0m %s\n" "$1" >&2; exit 1; }

# BANNER
printf "\n"
printf "  \033[36m✕\033[0m  \033[1mStryx Skills\033[0m \033[2m%s · Stryx Labs\033[0m\n" "$VERSION"
printf "  \033[2m─────────────────────────────────\033[0m\n\n"

# PRE-INSTALL CHECKS
need() {
  command -v "$1" >/dev/null 2>&1 || fail "Required tool '$1' is not installed."
}
need curl
need unzip
need shasum 2>/dev/null || need sha256sum

# DETERMINE WHAT TO DOWNLOAD
if [ -n "$SINGLE_SKILL" ]; then
  ZIP_NAME="${SINGLE_SKILL}.zip"
  info "Installing single skill: ${SINGLE_SKILL}"
else
  ZIP_NAME="stryx-skills-all.zip"
  info "Installing all 20 Stryx skills"
fi

ZIP_URL="${DIST_BASE}/${VERSION}/${ZIP_NAME}"
SHA_URL="${ZIP_URL}.sha256"

# CREATE INSTALL DIR
mkdir -p "$INSTALL_DIR"
info "Install directory: $INSTALL_DIR"

# DOWNLOAD
TMPDIR="$(mktemp -d -t stryx-skills-install-XXXXXX)"
trap 'rm -rf "$TMPDIR"' EXIT

info "Downloading ${ZIP_NAME}"
curl -fsSL --retry 3 --retry-delay 2 -o "$TMPDIR/$ZIP_NAME" "$ZIP_URL" \
  || fail "Could not download $ZIP_URL — check network or pin STRYX_SKILLS_VERSION"

# VERIFY CHECKSUM
info "Verifying SHA-256 checksum"
curl -fsSL -o "$TMPDIR/$ZIP_NAME.sha256" "$SHA_URL" \
  || fail "Could not download checksum file"

EXPECTED="$(awk '{print $1}' "$TMPDIR/$ZIP_NAME.sha256")"
if command -v shasum >/dev/null 2>&1; then
  ACTUAL="$(shasum -a 256 "$TMPDIR/$ZIP_NAME" | awk '{print $1}')"
else
  ACTUAL="$(sha256sum "$TMPDIR/$ZIP_NAME" | awk '{print $1}')"
fi

if [ "$EXPECTED" != "$ACTUAL" ]; then
  fail "Checksum mismatch. Expected $EXPECTED, got $ACTUAL. Aborting for safety."
fi
ok "Checksum OK"

# EXTRACT
info "Extracting to $INSTALL_DIR"
unzip -q -o "$TMPDIR/$ZIP_NAME" -d "$INSTALL_DIR"

# COUNT INSTALLED SKILLS
if [ -n "$SINGLE_SKILL" ]; then
  COUNT=1
else
  COUNT="$(find "$INSTALL_DIR" -maxdepth 1 -type d -name 'stryx-*' | wc -l | tr -d ' ')"
fi

# DONE
printf "\n"
ok "\033[1m${COUNT} Stryx skill$([ "$COUNT" -ne 1 ] && echo s) installed.\033[0m"
info "Restart Claude Code to discover them"
info "Activate: tell Claude 'use stryx-3d-web-design' or any other stryx-* skill"
info "Docs: \033[36mhttps://stryxlabs.com/products\033[0m"
info "License: \033[36mhttps://stryxlabs.com/LICENSE.txt\033[0m (free for personal and commercial use)"
printf "\n"
