#!/usr/bin/env bash

export MISE_EXPERIMENTAL=1
export MISE_LOCKFILE=1

cat <<EOF >mise.toml
[tools."github:jdx/mise-test-fixtures"]
version = "1.0.0"
asset_pattern = "hello-world-1.0.0.tar.gz"
EOF

touch mise.lock
mise install

# Adding a supplemental pattern to an existing version must not be skipped.
cat <<EOF >mise.toml
[tools."github:jdx/mise-test-fixtures"]
version = "1.0.0"
asset_pattern = "hello-world-1.0.0.tar.gz"
additional_asset_patterns = ["fd-8.7.0.tar.gz"]
EOF

mise install

# Both archives are extracted into one installation.
install_path=$(mise where github:jdx/mise-test-fixtures)
assert_contains "$install_path/hello-world-1.0.0/bin/hello-world" "hello world"
assert_contains "$install_path/fd-8.7.0/bin/fd" "alternative to 'find'"

# The supplemental artifact is independently pinned and checksummed.
assert_contains "cat mise.lock" 'additional_asset_patterns = "fd-8.7.0.tar.gz"'
assert_contains "cat mise.lock" 'url = "https://github.com/jdx/mise-test-fixtures/releases/download/v1.0.0/fd-8.7.0.tar.gz"'
assert_contains "cat mise.lock" 'checksum = "sha256:230cf587de59730a1d7f9c49004f301292927621a336578723518fc9d03f4824"'

# Locked mode must reject an incomplete supplemental artifact list.
cp mise.lock mise.lock.complete
mise uninstall github:jdx/mise-test-fixtures
awk '
  /^\[\[tools\."github:jdx\/mise-test-fixtures"\."platforms\..*"\.additional_artifacts\]\]$/ {
    skip_artifact = 1
    next
  }
  skip_artifact && /^$/ {
    skip_artifact = 0
    next
  }
  !skip_artifact { print }
' mise.lock.complete >mise.lock
assert_fail "mise install --locked"

# Locked mode must also reject removing the supplemental pattern from config.
cp mise.lock.complete mise.lock
cp mise.toml mise.toml.complete
sed '/additional_asset_patterns/d' mise.toml.complete >mise.toml
assert_fail "mise install --locked"

# Restoring the complete config and lock permits the reinstall.
cp mise.toml.complete mise.toml
mise install --locked
install_path=$(mise where github:jdx/mise-test-fixtures)
assert_contains "$install_path/fd-8.7.0/bin/fd" "alternative to 'find'"

# Removing the supplemental pattern refreshes stale lock artifacts.
sed '/additional_asset_patterns/d' mise.toml >mise.toml.primary-only
mv mise.toml.primary-only mise.toml
mise install
assert_fail "$install_path/fd-8.7.0/bin/fd"
mise install --locked
