#!/usr/bin/env bash

# Cross-platform `mise lock` for the s3 backend resolves per-target URLs from
# the platforms table or a templated base url without needing S3 access, and
# locked mode (--locked / MISE_LOCKED=1) accepts the resulting lockfile.

detect_platform
PLATFORM="$MISE_PLATFORM"

# --- Test 1: per-platform URLs from the platforms table ---
cat <<'EOF' >mise.toml
[tools."s3:xtool"]
version = "1.0.0"
region = "us-east-1"

[tools."s3:xtool".platforms]
linux-x64 = { url = "s3://test-bucket/tools/xtool-{{version}}-linux-x64.tar.gz" }
macos-arm64 = { url = "s3://test-bucket/tools/xtool-{{version}}-macos-arm64.tar.gz", checksum = "sha256:1111111111111111111111111111111111111111111111111111111111111111" }
EOF

mise lock --platform linux-x64,macos-arm64

# each target platform gets its own rendered URL
assert_contains "cat mise.lock" "s3://test-bucket/tools/xtool-1.0.0-linux-x64.tar.gz"
assert_contains "cat mise.lock" "s3://test-bucket/tools/xtool-1.0.0-macos-arm64.tar.gz"
# a checksum configured for a platform is copied into the lockfile
assert_contains "cat mise.lock" "sha256:1111111111111111111111111111111111111111111111111111111111111111"

# a platform with no configured URL is skipped, not written as an empty entry
mise lock --platform windows-x64
assert_not_contains "cat mise.lock" "platforms.windows-x64"

# --- Test 2: os()/arch() in a base url render per target platform ---
rm -f mise.lock
cat <<'EOF' >mise.toml
[tools."s3:tmpl"]
version = "2.0.0"
url = "s3://test-bucket/tools/tmpl-{{ version }}-{{ os() }}-{{ arch() }}.tar.gz"
EOF

mise lock --platform linux-x64,macos-arm64

assert_contains "cat mise.lock" "s3://test-bucket/tools/tmpl-2.0.0-linux-x64.tar.gz"
assert_contains "cat mise.lock" "s3://test-bucket/tools/tmpl-2.0.0-macos-arm64.tar.gz"

# --- Test 3: locked mode accepts lockfile URLs generated by mise lock ---
# dry-run exercises the locked-mode lockfile-URL check without S3 access
rm -f mise.lock
mise lock --platform "$PLATFORM"
assert_contains "cat mise.lock" "platforms.$PLATFORM"
assert_contains "MISE_LOCKED=1 mise install --dry-run 2>&1" "would install"
