#!/usr/bin/env bash

TOMBI_VERSION="0.9.22"

mise use -g tombi@$TOMBI_VERSION

SCHEMA_PATH="$ROOT/schema/mise.json"
TOMBI="mise x tombi@$TOMBI_VERSION -- tombi"
TOMBI_LINT="$TOMBI lint --offline --no-cache --error-on-warnings --quiet"
assert_contains "$TOMBI --version" "tombi $TOMBI_VERSION"

cat >"$HOME/tombi.toml" <<EOF
toml-version = "v1.0.0"

[schema]
enabled = true
strict = true

[[schemas]]
path = "file://$SCHEMA_PATH"
include = ["mise-hooks.toml", "mise-bad-hooks.toml"]
EOF

cat >"$HOME/workdir/mise-hooks.toml" <<'TOML'
[bootstrap.hooks]
pre-packages = "echo pre-packages"
post-packages = ["echo post-packages one", "echo post-packages two"]
pre-repos = { run = "echo pre-repos" }
post-repos = { run = ["echo post-repos one", "echo post-repos two"] }
pre-dotfiles = "echo pre-dotfiles"
post-dotfiles = "echo post-dotfiles"
pre-defaults = "echo pre-defaults"
post-defaults = "echo post-defaults"
pre-user = "echo pre-user"
post-user = "echo post-user"
final = "echo final"
pre_packages = "echo underscore alias"
post_packages = { run = "echo forward-compatible hook", future = { nested = true } }
pre_repos = "echo underscore alias"
post_repos = "echo underscore alias"
pre_dotfiles = "echo underscore alias"
post_dotfiles = "echo underscore alias"
pre_defaults = "echo underscore alias"
post_defaults = "echo underscore alias"
pre_user = "echo underscore alias"
post_user = "echo underscore alias"
pre_tools = "echo underscore alias"
post_tools = "echo underscore alias"

[bootstrap.hooks.pre-tools]
run = "echo pre-tools"

[bootstrap.hooks.post-tools]
run = ["echo post-tools one", "echo post-tools two"]
TOML

cd "$HOME/workdir"
assert_succeed "$TOMBI_LINT mise-hooks.toml"

for invalid_hook in \
  'unknown = "echo unknown"' \
  'pre-packages = 1' \
  'pre-packages = ["echo valid", 1]' \
  'pre-packages = {}' \
  'pre-packages = { run = 1 }' \
  'pre-packages = { command = "echo missing run" }'; do
  cat >"$HOME/workdir/mise-bad-hooks.toml" <<TOML
[bootstrap.hooks]
$invalid_hook
TOML
  assert_fail "$TOMBI_LINT mise-bad-hooks.toml"
done
