#!/usr/bin/env bash
# master-skill-web installer for llm-agent-infra
# (LLM agent 基础设施)
#
# Usage:
#   curl -fsSL https://localhost:3100/api/skills/llm-agent-infra/install | bash
#   TARGET=./my-dir curl -fsSL https://localhost:3100/api/skills/llm-agent-infra/install | bash

set -euo pipefail

SLUG="llm-agent-infra"
BASE="${MASTER_SKILL_BASE:-https://localhost:3100}"
TARGET="${TARGET:-$HOME/.claude/skills/${SLUG}-master}"

need() {
  command -v "$1" >/dev/null 2>&1 || { echo "missing dependency: $1" >&2; exit 2; }
}
need curl
need jq

echo "→ fetching ${SLUG} from ${BASE}"
TMPDIR=$(mktemp -d)
trap 'rm -rf "${TMPDIR}"' EXIT

curl -fsS "${BASE}/api/skills/${SLUG}" -o "${TMPDIR}/skill.json"

mkdir -p "${TARGET}" "${TARGET}/cli" "${TARGET}/sub-skills"

jq -r '.current.skill_md // ""' "${TMPDIR}/skill.json" > "${TARGET}/SKILL.md"
[ -s "${TARGET}/SKILL.md" ] || { echo "no current skill body" >&2; exit 3; }

# CLI scripts (jsonb array of {path, content}). Iterate via jq -c so
# empty arrays produce zero lines (avoids macOS-vs-GNU `seq` differences).
jq -c '.current.cli_scripts // [] | .[]' "${TMPDIR}/skill.json" | while IFS= read -r entry; do
  p=$(printf '%s' "$entry" | jq -r '.path')
  [ -z "$p" ] || [ "$p" = "null" ] && continue
  printf '%s' "$entry" | jq -r '.content' > "${TARGET}/cli/${p}"
  chmod +x "${TARGET}/cli/${p}" 2>/dev/null || true
done

# Sub-skills (one folder per persona)
jq -c '.sub_skills // [] | .[]' "${TMPDIR}/skill.json" | while IFS= read -r entry; do
  p=$(printf '%s' "$entry" | jq -r '.persona_slug')
  [ -z "$p" ] || [ "$p" = "null" ] && continue
  mkdir -p "${TARGET}/sub-skills/${p}"
  printf '%s' "$entry" | jq -r '.skill_md' > "${TARGET}/sub-skills/${p}/SKILL.md"
done

# Manifest of sources (for traceability)
jq '{slug, name_cn, name_en, current: (.current | {version, generated_at}), sources}' "${TMPDIR}/skill.json" > "${TARGET}/meta.json"

echo "✓ installed ${SLUG} to ${TARGET}"
echo "  - SKILL.md ($(wc -c < "${TARGET}/SKILL.md" | tr -d ' ') bytes)"
echo "  - cli/ ($(ls "${TARGET}/cli" 2>/dev/null | wc -l | tr -d ' ') scripts)"
echo "  - sub-skills/ ($(ls "${TARGET}/sub-skills" 2>/dev/null | wc -l | tr -d ' ') personas)"
echo "  - meta.json"
