#!/usr/bin/env bash

# A tool that ships a skill, as a plugin whose install lays down a packslip
# statement. With skills.auto_sync on, `mise use -g` links it under HOME.
mkdir -p plugin/bin
cat >plugin/bin/list-all <<'SH'
#!/usr/bin/env bash
echo "1.0.0 2.0.0"
SH
cat >plugin/bin/install <<'SH'
#!/usr/bin/env bash
set -e
mkdir -p "$ASDF_INSTALL_PATH/bin" "$ASDF_INSTALL_PATH/skill"
echo "# skilled $ASDF_INSTALL_VERSION" >"$ASDF_INSTALL_PATH/skill/SKILL.md"
printf '#!/bin/sh\n' >"$ASDF_INSTALL_PATH/bin/skilled"
chmod +x "$ASDF_INSTALL_PATH/bin/skilled"
digest="$(printf 'a%.0s' $(seq 64))"
cat >"$ASDF_INSTALL_PATH/.mise-packslip.json" <<JSON
{"_type":"https://in-toto.io/Statement/v1","subject":[{"name":"skilled.tar.gz","digest":{"sha256":"$digest"}}],"predicateType":"https://packslip.dev/release/v1","predicate":{"project":"github.com/test/skilled","version":"$ASDF_INSTALL_VERSION","published_at":"2026-09-01T00:00:00Z","artifacts":[{"name":"skilled.tar.gz","size":1,"format":"tar.gz","bin":["bin/skilled"]}],"resources":[{"kind":"skill","name":"skilled","archive":"skill"}],"identity":{"scheme":"sigstore-oidc","key_id":"https://github.com/test/skilled/.github/workflows/release.yml@refs/tags/v$ASDF_INSTALL_VERSION","issuer":"https://token.actions.githubusercontent.com"}}}
JSON
SH
chmod +x plugin/bin/list-all plugin/bin/install
mise plugins link skilled "$PWD/plugin"

export MISE_SKILLS_AUTO_SYNC=1
export MISE_SKILLS_DIR=.agents/skills

mkdir project
cd project || exit 1
mise use -g skilled@1.0.0
assert_contains "cat $HOME/.agents/skills/skilled/SKILL.md" "# skilled 1.0.0"
assert_contains "cat $HOME/.agents/skills/.mise-skills.json" "skilled/1.0.0/skill"
assert 'test -e .agents; echo $?' "1"

# A later global change moves the link.
mise use -g skilled@2.0.0
assert_contains "cat $HOME/.agents/skills/skilled/SKILL.md" "# skilled 2.0.0"

# Only the global config counts: a project that pins another version of the
# tool does not change what lands in the home directory, for `use -g` or for
# an explicit global sync.
mkdir pinned
cd pinned || exit 1
echo '[tools]
skilled = "1.0.0"' >mise.toml
mise use -g skilled@2.0.0
assert_contains "cat $HOME/.agents/skills/skilled/SKILL.md" "# skilled 2.0.0"
mise skills sync --global --prune
assert_contains "cat $HOME/.agents/skills/skilled/SKILL.md" "# skilled 2.0.0"

# Installing or upgrading a global tool moves its links too, from anywhere.
cd "$HOME" || exit 1
mise use -g skilled@latest
assert_contains "cat $HOME/.agents/skills/skilled/SKILL.md" "# skilled 2.0.0"
mise install skilled@1.0.0
mise use -g skilled@1.0.0
assert_contains "cat $HOME/.agents/skills/skilled/SKILL.md" "# skilled 1.0.0"
mkdir "$HOME/elsewhere"
cd "$HOME/elsewhere" || exit 1
mise use -g --pin skilled@2.0.0 >/dev/null
rm -rf "$HOME/.agents/skills/skilled" "$HOME/.agents/skills/.mise-skills.json"
mise install skilled
assert_contains "cat $HOME/.agents/skills/skilled/SKILL.md" "# skilled 2.0.0"

# One absolute skills.dir for everything: the project's links are not
# replaced or pruned by the global pass.
cd "$HOME" || exit 1
mkdir -p shared-skills abs-project
cd abs-project || exit 1
echo '[tools]
skilled = "1.0.0"' >mise.toml
MISE_SKILLS_DIR="$HOME/shared-skills" MISE_SKILLS_PRUNE=1 mise use skilled@1.0.0
assert_contains "cat $HOME/shared-skills/skilled/SKILL.md" "# skilled 1.0.0"
