#!/usr/bin/env bash

export MISE_LOCKFILE=1
export MISE_EXPERIMENTAL=1

echo "=== Testing basic lock command with no tools ==="
# Test basic lock command with no tools configured - should show no tools message
rm -f mise.toml mise.lock
assert_contains "mise lock" "No tools configured to lock"

echo "=== Testing lock command generates cross-platform lockfile ==="
# Create a mise.toml with an aqua tool (which supports cross-platform resolution)
cat <<EOF >mise.toml
[tools]
"aqua:jqlang/jq" = "1.7.1"
EOF

rm -f mise.lock

# Test that lock command generates lockfile for all 5 default platforms
output=$(mise lock 2>&1)
assert_contains "echo '$output'" "Targeting 5 platform(s)"
assert_contains "echo '$output'" "Processing 1 tool(s)"
assert_contains "echo '$output'" "Updated"
assert_contains "echo '$output'" "Lockfile written to"

# Verify lockfile was created with platform data
assert "test -f mise.lock"
assert_contains "cat mise.lock" "platforms.linux-x64"
assert_contains "cat mise.lock" "platforms.linux-arm64"
assert_contains "cat mise.lock" "platforms.macos-x64"
assert_contains "cat mise.lock" "platforms.macos-arm64"
assert_contains "cat mise.lock" "platforms.windows-x64"
assert_contains "cat mise.lock" "jqlang/jq"
assert_contains "cat mise.lock" "1.7.1"
# URLs should be github release URLs for jq
assert_contains "cat mise.lock" "github.com/jqlang/jq/releases"

echo "=== Testing dry-run mode ==="
rm -f mise.lock
output=$(mise lock --dry-run 2>&1)
assert_contains "echo '$output'" "Dry run - would update"
assert_contains "echo '$output'" "aqua:jqlang/jq@1.7.1 for linux-x64"
# Lockfile should NOT be created in dry-run mode
assert "test ! -f mise.lock"

echo "=== Testing platform filtering ==="
rm -f mise.lock
# Test filtering to specific platforms
output=$(mise lock --platform linux-x64,macos-arm64 2>&1)
assert_contains "echo '$output'" "Targeting 2 platform(s)"
assert_contains "echo '$output'" "linux-x64"
assert_contains "echo '$output'" "macos-arm64"

# Verify lockfile only has the requested platforms
assert_contains "cat mise.lock" "platforms.linux-x64"
assert_contains "cat mise.lock" "platforms.macos-arm64"
assert_not_contains "cat mise.lock" "platforms.windows-x64"

echo "=== Testing multiple tools ==="
rm -f mise.lock
cat <<EOF >mise.toml
[tools]
"aqua:jqlang/jq" = "1.7.1"
"aqua:mikefarah/yq" = "4.44.6"
EOF

output=$(mise lock --platform linux-x64 2>&1)
assert_contains "echo '$output'" "Processing 2 tool(s)"
assert_contains "cat mise.lock" "jqlang/jq"
assert_contains "cat mise.lock" "mikefarah/yq"

echo "=== Testing tool filtering ==="
rm -f mise.lock
# Filter to only jq
output=$(mise lock "aqua:jqlang/jq" --platform linux-x64 2>&1)
assert_contains "echo '$output'" "Processing 1 tool(s)"
assert_contains "cat mise.lock" "jqlang/jq"
assert_not_contains "cat mise.lock" "mikefarah/yq"

echo "=== Testing help output ==="
assert_contains "mise lock --help" "Update lockfile checksums and URLs"
assert_contains "mise lock --help" "--platform"
assert_contains "mise lock --help" "--dry-run"
assert_contains "mise lock --help" "--jobs"

echo "=== Cleanup ==="
rm -f mise.lock mise.toml

echo "mise lock tests passed!"
