#!/usr/bin/env bash
# shellcheck disable=SC2209

echo "tools.dummy = '1'" >mise.toml
echo "tools.dummy = '2'" >mise.test.toml
echo "tools.dummy = '3'" >mise.ci.toml

assert "mise ls dummy" "dummy  1.1.0 (missing)  ~/workdir/mise.toml  1"
MISE_ENV=test assert "mise ls dummy" "dummy  2.0.0 (missing)  ~/workdir/mise.test.toml  2"
MISE_ENV=ci assert "mise ls dummy" "dummy  3 (missing)  ~/workdir/mise.ci.toml  3"
MISE_ENV=ci,test assert "mise ls dummy" "dummy  2.0.0 (missing)  ~/workdir/mise.test.toml  2"
MISE_ENV=test,ci assert "mise ls dummy" "dummy  3 (missing)  ~/workdir/mise.ci.toml  3"

# Dotted conf.d fragments remain unconditional by default during migration.
mkdir -p .mise/conf.d
cat >.mise/conf.d/00-base.toml <<'EOF'
[env]
CONF_D_COMMON = "base"
CONF_D_ENV = "base"
EOF
cat >.mise/conf.d/01-local.local.toml <<'EOF'
[env]
CONF_D_ALWAYS_LOCAL = "local"
EOF
cat >.mise/conf.d/10-test.test.toml <<'EOF'
[env]
CONF_D_ENV = "test"
CONF_D_ENV_LOCAL = "test"
EOF
cat >.mise/conf.d/11-test-local.test.local.toml <<'EOF'
[env]
CONF_D_ENV_LOCAL = "test-local"
EOF
cat >.mise/conf.d/20-ci.ci.toml <<'EOF'
[env]
CONF_D_ENV = "ci"
EOF
cat >.mise/conf.d/99-inactive.inactive.toml <<'EOF'
[env]
CONF_D_INACTIVE = "loaded"
EOF

assert_contains "mise env 2>&1" "deprecated [dotted_conf_d_filename]"
assert_not_contains "MISE_ENV_CONF_D=false mise env 2>&1" "deprecated [dotted_conf_d_filename]"
assert "mise env --json | jq -r '[.CONF_D_COMMON, .CONF_D_ENV, .CONF_D_ALWAYS_LOCAL, .CONF_D_INACTIVE] | @tsv'" $'base\tci\tlocal\tloaded'
MISE_ENV=test assert "mise env --json | jq -r '[.CONF_D_ENV, .CONF_D_ENV_LOCAL, .CONF_D_INACTIVE] | @tsv'" $'ci\ttest-local\tloaded'

# Users can opt into environment-specific conf.d filenames immediately.
MISE_ENV_CONF_D=true assert "mise env --json | jq -r '[.CONF_D_COMMON, .CONF_D_ENV, .CONF_D_ALWAYS_LOCAL, .CONF_D_INACTIVE] | @tsv'" $'base\tbase\tlocal\t'
MISE_ENV_CONF_D=true MISE_ENV=test assert "mise env --json | jq -r '[.CONF_D_ENV, .CONF_D_ENV_LOCAL, .CONF_D_INACTIVE] | @tsv'" $'test\ttest-local\t'
MISE_ENV_CONF_D=true MISE_ENV=test,ci assert "mise env --json | jq -r '[.CONF_D_ENV, .CONF_D_ENV_LOCAL] | @tsv'" $'ci\ttest-local'

# Environment names are matched literally and by the complete suffix after the first dot
cat >'.mise/conf.d/30-literal.qa*.toml' <<'EOF'
[env]
CONF_D_LITERAL = "literal"
EOF
cat >.mise/conf.d/31-unrelated.qa1.toml <<'EOF'
[env]
CONF_D_UNRELATED = "loaded"
EOF
cat >.mise/conf.d/40-dotted.qa.prod.toml <<'EOF'
[env]
CONF_D_DOTTED = "dotted"
EOF
cat >.mise/conf.d/41-prod.prod.toml <<'EOF'
[env]
CONF_D_PROD = "prod"
EOF

MISE_ENV_CONF_D=true MISE_ENV='qa*' assert "mise env --json | jq -r '[.CONF_D_LITERAL, .CONF_D_UNRELATED] | @tsv'" $'literal\t'
MISE_ENV_CONF_D=true MISE_ENV=prod assert "mise env --json | jq -r '[.CONF_D_DOTTED, .CONF_D_PROD] | @tsv'" $'\tprod'
MISE_ENV_CONF_D=true MISE_ENV=qa.prod assert "mise env --json | jq -r '[.CONF_D_DOTTED, .CONF_D_PROD] | @tsv'" $'dotted\t'
