#!/usr/bin/env bash

export MISE_LOCKFILE=1

detect_platform
PLATFORM="$MISE_PLATFORM"
if [[ $PLATFORM == "linux-x64" ]]; then
  EXTRA_PLATFORM="macos-x64"
else
  EXTRA_PLATFORM="linux-x64"
fi

SRV="$PWD/relock-server"
mkdir -p "$SRV"

start_http_server --dir "$SRV"

CURRENT_SHA="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
EXTRA_SHA="bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
OLD_CURRENT_SHA="cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
OLD_EXTRA_SHA="dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"

cat >"$SRV/checksums.json" <<JSON
{
  "platforms": {
    "$PLATFORM": "$CURRENT_SHA",
    "$EXTRA_PLATFORM": "$EXTRA_SHA"
  }
}
JSON

# The http tool is already at the config version, so upgrading dummy is the only
# install in this run. The stale http lock entry below should still be rewritten
# by update_lockfiles and then re-locked with URL/checksum platform metadata.
mise install dummy@1.0.0
mkdir -p "$MISE_DATA_DIR/installs/http-relock-target/2.0.0/bin"
cat >"$MISE_DATA_DIR/installs/http-relock-target/2.0.0/bin/relock-target" <<'EOF'
#!/usr/bin/env bash
echo relock-target 2.0.0
EOF
chmod +x "$MISE_DATA_DIR/installs/http-relock-target/2.0.0/bin/relock-target"

cat >mise.toml <<EOF
[tools]
dummy = "1"

[tools."http:relock-target"]
version = "2.0.0"
url = "http://127.0.0.1:${HTTP_PORT}/relock-target-{{ version }}-{{ os() }}-{{ arch() }}.tar.gz"
checksum_url = "http://127.0.0.1:${HTTP_PORT}/checksums.json"
checksum_expr = '"sha256:" + fromJSON(body).platforms[os + "-" + arch]'
bin_path = "bin"
EOF

cat >mise.lock <<EOF
[[tools."http:relock-target"]]
version = "1.0.0"
backend = "http:relock-target"
"platforms.$PLATFORM" = { url = "http://127.0.0.1:${HTTP_PORT}/relock-target-1.0.0-${PLATFORM}.tar.gz", checksum = "sha256:${OLD_CURRENT_SHA}" }
"platforms.$EXTRA_PLATFORM" = { url = "http://127.0.0.1:${HTTP_PORT}/relock-target-1.0.0-${EXTRA_PLATFORM}.tar.gz", checksum = "sha256:${OLD_EXTRA_SHA}" }

[[tools.dummy]]
version = "1.0.0"
backend = "asdf:dummy"
EOF

mise upgrade dummy --bump

assert_contains "cat mise.toml" 'dummy = "2"'
assert_contains "cat mise.lock" '[[tools."http:relock-target"]]'
assert_contains "cat mise.lock" 'version = "2.0.0"'
assert_not_contains "cat mise.lock" 'version = "1.0.0"'
assert_not_contains "cat mise.lock" "relock-target-1.0.0"

assert_contains "cat mise.lock" "\"platforms.$PLATFORM\""
assert_contains "cat mise.lock" "relock-target-2.0.0-${PLATFORM}.tar.gz"
assert_contains "cat mise.lock" "sha256:${CURRENT_SHA}"

assert_contains "cat mise.lock" "\"platforms.$EXTRA_PLATFORM\""
assert_contains "cat mise.lock" "relock-target-2.0.0-${EXTRA_PLATFORM}.tar.gz"
assert_contains "cat mise.lock" "sha256:${EXTRA_SHA}"
