#!/usr/bin/env bash

# A tool plugin that sets `downloads = false` in metadata.lua installs nothing
# from a URL, so `mise install --locked` must not demand a lockfile URL for it.

PLUGIN_DIR="$PWD/vfox-nodl"
mkdir -p "$PLUGIN_DIR/hooks"

cat >"$PLUGIN_DIR/metadata.lua" <<'LUA'
PLUGIN = {}
PLUGIN.name = "nodl"
PLUGIN.version = "0.1.0"
PLUGIN.homepage = "https://example.com/nodl"
PLUGIN.license = "MIT"
PLUGIN.description = "downloads nothing"
PLUGIN.downloads = false
LUA

cat >"$PLUGIN_DIR/hooks/available.lua" <<'LUA'
function PLUGIN:Available(ctx)
	return { { version = "1.0.0" } }
end
LUA

cat >"$PLUGIN_DIR/hooks/pre_install.lua" <<'LUA'
function PLUGIN:PreInstall(ctx)
	return { version = ctx.version }
end
LUA

cat >"$PLUGIN_DIR/hooks/env_keys.lua" <<'LUA'
function PLUGIN:EnvKeys(ctx)
	return {}
end
LUA

mise plugin link nodl "$PLUGIN_DIR"

cat >mise.toml <<'TOML'
[tools]
nodl = "1.0.0"
TOML
touch mise.lock
mise lock
assert_not_contains "cat mise.lock" "url ="
assert_succeed "mise install --locked"
assert_contains "mise ls --installed nodl" "1.0.0"

# Without the flag, the same plugin is refused in locked mode.
rm -rf "$MISE_DATA_DIR/installs/nodl"
grep -v 'downloads = false' "$PLUGIN_DIR/metadata.lua" >"$PLUGIN_DIR/metadata.lua.new"
mv "$PLUGIN_DIR/metadata.lua.new" "$PLUGIN_DIR/metadata.lua"
assert_contains "mise install --locked 2>&1 || true" "No lockfile URL found"

# A plugin that declares downloads = false must not return a url.
echo 'PLUGIN.downloads = false' >>"$PLUGIN_DIR/metadata.lua"
cat >"$PLUGIN_DIR/hooks/pre_install.lua" <<'LUA'
function PLUGIN:PreInstall(ctx)
	return { version = ctx.version, url = "https://example.com/nodl.tar.gz" }
end
LUA
rm -rf "$MISE_DATA_DIR/installs/nodl"
assert_contains "mise install 2>&1 || true" "but PreInstall returned a url"
