#!/usr/bin/env bash

# Test that task_config.shell is inherited by inline and included TOML tasks,
# while task-local and task-template shells take precedence.
export MISE_EXPERIMENTAL=1

mkdir -p "shell wrappers"

cat <<'SCRIPT' >"shell wrappers/default"
#!/usr/bin/env bash
echo TASK_CONFIG_SHELL
exec bash "$@"
SCRIPT
chmod +x "shell wrappers/default"

cat <<'SCRIPT' >"shell wrappers/override"
#!/usr/bin/env bash
echo OVERRIDE_SHELL
exec bash "$@"
SCRIPT
chmod +x "shell wrappers/override"

cat <<'EOF' >mise.toml
monorepo_root = true

[monorepo]
config_roots = [
    "child",
    "child-override",
    "child-middle/nested",
    "child-no-cascade",
    "child-no-cascade/nested",
]

[task_config]
cascade = true
includes = ["tasks.toml", "shared-tasks"]
dir = "{{config_root}}/task-cwd"
shell = '"{{config_root}}/shell wrappers/default" -c'

[task_templates.override]
shell = '"{{config_root}}/shell wrappers/override" -c'

[tasks.inline]
run = "echo INLINE"

[tasks.explicit]
run = "echo EXPLICIT"
shell = '"{{config_root}}/shell wrappers/override" -c'

[tasks.templated]
extends = "override"
run = "echo TEMPLATED"
EOF

cat <<'EOF' >mise.local.toml
[tasks.overlay]
run = "echo OVERLAY"
EOF

cat <<'EOF' >tasks.toml
[included]
run = "echo INCLUDED"

[included-templated]
extends = "override"
run = "echo INCLUDED_TEMPLATED"
EOF

mkdir -p task-cwd shared-tasks "child/shell wrappers" child/task-cwd \
  "child-override/shell wrappers" child-override/task-cwd \
  "child-middle/nested/shell wrappers" child-middle/nested/middle-cwd \
  child-no-cascade/nested
cp "shell wrappers/default" "child/shell wrappers/default"
cp "shell wrappers/override" "child-override/shell wrappers/override"
cp "shell wrappers/default" "child-middle/nested/shell wrappers/default"
cat <<'EOF' >child/mise.toml
[tasks.child]
run = "echo CHILD"

[tasks.cwd]
run = 'basename "$PWD"'
EOF

cat <<'EOF' >child-override/mise.toml
[task_config]
shell = '"{{config_root}}/shell wrappers/override" -c'

[tasks.child]
run = "echo CHILD_OVERRIDE"
EOF

cat <<'EOF' >child-no-cascade/mise.toml
[task_config]
cascade = false

[tasks.child]
run = "echo CHILD_NO_CASCADE"
EOF

cat <<'EOF' >child-no-cascade/nested/mise.toml
[tasks.child]
run = "echo NESTED_NO_CASCADE"
EOF

cat <<'EOF' >child-middle/mise.toml
[task_config]
dir = "{{config_root}}/middle-cwd"
EOF

cat <<'EOF' >child-middle/nested/mise.toml
[tasks.child]
run = 'echo NESTED_MERGED; basename "$PWD"'
EOF

assert "mise run inline" "TASK_CONFIG_SHELL
INLINE"
assert "mise run included" "TASK_CONFIG_SHELL
INCLUDED"
assert "mise run explicit" "OVERRIDE_SHELL
EXPLICIT"
assert "mise run templated" "OVERRIDE_SHELL
TEMPLATED"
assert "mise run included-templated" "OVERRIDE_SHELL
INCLUDED_TEMPLATED"
assert "mise run overlay" "TASK_CONFIG_SHELL
OVERLAY"
assert "mise -C child run child" "TASK_CONFIG_SHELL
CHILD"
assert "mise -C child run included" "TASK_CONFIG_SHELL
INCLUDED"
assert "mise -C child run cwd" "TASK_CONFIG_SHELL
task-cwd"
assert "mise -C child-override run child" "OVERRIDE_SHELL
CHILD_OVERRIDE"
assert "mise run //child:child" "TASK_CONFIG_SHELL
CHILD"
assert "mise run //child:included" "TASK_CONFIG_SHELL
INCLUDED"
assert "mise run //child-override:child" "OVERRIDE_SHELL
CHILD_OVERRIDE"
assert "mise run //child-no-cascade:child" "CHILD_NO_CASCADE"
assert "mise run //child-no-cascade/nested:child" "NESTED_NO_CASCADE"
assert "mise run //child-middle/nested:child" "TASK_CONFIG_SHELL
NESTED_MERGED
middle-cwd"

mise -C child tasks add --file generated -- echo GENERATED
assert "test -f shared-tasks/generated && echo CREATED" "CREATED"

mise -C child-no-cascade tasks add --file generated -- echo GENERATED
assert "test -f child-no-cascade/mise-tasks/generated && echo CREATED" "CREATED"
