#!/usr/bin/env bash

export MISE_LOCKFILE=1
export MISE_EXPERIMENTAL=1

echo "=== Testing lockfile creation with aqua tool ==="
# 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 creates lockfile
output=$(mise lock --platform linux-x64 2>&1)
assert_contains "echo '$output'" "Processing 1 tool(s)"
assert_contains "echo '$output'" "Updated"
assert_contains "echo '$output'" "Lockfile written"

# Verify lockfile was created
assert "test -f mise.lock"
assert_contains "cat mise.lock" "jqlang/jq"
assert_contains "cat mise.lock" "1.7.1"
assert_contains "cat mise.lock" "platforms.linux-x64"

echo "=== Testing lockfile update (adding platforms) ==="
# Now add another platform - it should update the existing lockfile
output=$(mise lock --platform macos-arm64 2>&1)
assert_contains "echo '$output'" "Updated"

# Should now have both platforms
assert_contains "cat mise.lock" "platforms.linux-x64"
assert_contains "cat mise.lock" "platforms.macos-arm64"

echo "=== Testing lockfile with multiple tools ==="
rm -f mise.lock
cat <<EOF >mise.toml
[tools]
"aqua:jqlang/jq" = "1.7.1"
"aqua:sharkdp/fd" = "10.2.0"
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" "sharkdp/fd"

echo "=== Testing lockfile retains existing data ==="
# Create a lockfile with existing data
rm -f mise.lock
mise lock --platform linux-x64

# Now add more platforms
mise lock --platform macos-arm64

# Original platform data should still exist
assert_contains "cat mise.lock" "platforms.linux-x64"
assert_contains "cat mise.lock" "platforms.macos-arm64"

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

echo "mise lock creation tests passed!"
