#!/usr/bin/env bash

assert_contains "mise ls-remote dummy" '1.0.0
1.1.0
2.0.0'

assert_contains "mise p list-remote" "elixir"

assert "mise ls-remote dummy 1" "1.0.0
1.1.0"
assert "mise ls-remote dummy@2" "2.0.0"
assert "mise ls-remote dummy@sub-1:2" "1.0.0
1.1.0"

# Date filtering should happen after reading the cached full remote version list.
# Running two cutoffs back-to-back catches regressions where the first filtered
# result is cached and reused for the second query.
assert_contains "mise ls-remote jq --minimum-release-age 2019-01-01" "1.6"
assert_not_contains "mise ls-remote jq --minimum-release-age 2019-01-01" "1.7.1"
assert_contains "mise ls-remote jq --minimum-release-age 2024-01-01" "1.7.1"
assert_not_empty "mise ls-remote jq --minimum-release-age 1d"
assert_contains "mise ls-remote jq --before 2019-01-01" "1.6"

# All install_before sources should filter ls-remote output.
cat <<EOF >mise.toml
[settings]
install_before = "2019-01-01"
EOF
assert_contains "mise ls-remote jq" "1.6"
assert_not_contains "mise ls-remote jq" "1.7.1"

cat <<EOF >mise.toml
[tools]
jq = { version = "latest", install_before = "2019-01-01" }
EOF
assert_contains "mise ls-remote jq" "1.6"
assert_not_contains "mise ls-remote jq" "1.7.1"

cat <<EOF >mise.toml
[tools]
jq = { version = "latest", install_before = "2024-01-01" }
EOF
assert_contains "mise ls-remote jq --minimum-release-age 2019-01-01" "1.6"
assert_not_contains "mise ls-remote jq --minimum-release-age 2019-01-01" "1.7.1"
rm -f mise.toml

# Test --json flag outputs valid JSON with version field
json_output=$(mise ls-remote dummy --json)
assert_contains "echo '$json_output'" '"version"'

# Test -J short flag works the same as --json
json_output_short=$(mise ls-remote dummy -J)
assert_contains "echo '$json_output_short'" '"version"'

# Test JSON output for GitHub backend includes created_at
# Using a real GitHub tool to verify created_at timestamps are included
if github_json=$(mise ls-remote github:jdx/mise --json 2>/dev/null | head -1); then
  assert_contains "echo '$github_json'" '"created_at"'
fi

# Test JSON output for NPM backend includes created_at
if npm_json=$(mise ls-remote npm:prettier --json 2>/dev/null | head -1); then
  assert_contains "echo '$npm_json'" '"created_at"'
fi

# Test JSON output for Cargo backend includes created_at
if cargo_json=$(mise ls-remote cargo:eza --json 2>/dev/null | head -1); then
  assert_contains "echo '$cargo_json'" '"created_at"'
fi

# Test JSON output for Pipx backend includes created_at
if pipx_json=$(mise ls-remote pipx:black --json 2>/dev/null | head -1); then
  assert_contains "echo '$pipx_json'" '"created_at"'
fi
