extend = [{ path = "./cargo-make/main.toml" }]

[env]
CARGO_MAKE_EXTEND_WORKSPACE_MAKEFILE = true
CARGO_MAKE_CARGO_BUILD_TEST_FLAGS = ""
CARGO_MAKE_WORKSPACE_EMULATION = true
CARGO_MAKE_CRATE_WORKSPACE_MEMBERS = [
  "animated_show",
  "counter",
  "counter_isomorphic",
  "counters",
  "counters_stable",
  "counter_url_query",
  "counter_without_macros",
  "error_boundary",
  "errors_axum",
  "fetch",
  "hackernews",
  "hackernews_axum",
  "js-framework-benchmark",
  "leptos-tailwind-axum",
  "login_with_token_csr_only",
  "parent_child",
  "router",
  "session_auth_axum",
  "slots",
  "ssr_modes",
  "ssr_modes_axum",
  "suspense_tests",
  "tailwind",
  "tailwind_csr_trunk",
  "timer",
  "todo_app_sqlite",
  "todo_app_sqlite_axum",
  "todo_app_sqlite_viz",
  "todomvc",
]

[tasks.gen-members]
workspace = false
description = "Generate the list of workspace members"
script = '''
examples=$(ls | 
grep -v README.md | 
grep -v Makefile.toml | 
grep -v cargo-make | 
grep -v gtk | 
jq -R -s -c 'split("\n")[:-1]')
echo "CARGO_MAKE_CRATE_WORKSPACE_MEMBERS = $examples"
'''

[tasks.test-report]
workspace = false
description = "report ci test runners and tools for each example - OPTION: [all]"
script = '''
set -emu

BOLD="\e[1m"
GREEN="\e[0;32m"
ITALIC="\e[3m"
YELLOW="\e[0;33m"
RESET="\e[0m"

echo
echo "${YELLOW}Test Report${RESET}"
echo
echo "${ITALIC}Pass the option \"all\" to show all the examples${RESET}"
echo

makefile_paths=$(find . -name Makefile.toml -not -path '*/target/*' -not -path '*/node_modules/*' |
  sed 's%./%%' |
  sed 's%/Makefile.toml%%' |
  grep -v Makefile.toml |
  sort -u)

start_path=$(pwd)

for path in $makefile_paths; do
  cd $path

  crate_symbols=

  test_count=$(grep -r --exclude-dir=target --exclude-dir=node_modules --fixed-strings "#[test]" | wc -l)
  if [ $test_count -gt 0 ]; then
      crate_symbols="T"
  fi

  rstest_count=$(grep -r --exclude-dir=target --exclude-dir=node_modules --fixed-strings "#[rstest]" | wc -l)
  if [ $rstest_count -gt 0 ]; then
      crate_symbols=$crate_symbols"R"
  fi

  while read -r line; do
      case $line in
      *"cucumber"*)
          crate_symbols=$crate_symbols"C"
          ;;
      *"fantoccini"*)
          crate_symbols=$crate_symbols"F"
          ;;
      esac
  done <"./Cargo.toml"

  while read -r line; do
    case $line in
      *"cargo-make/wasm-test"*)
          crate_symbols=$crate_symbols"W"
        ;;
      *"cargo-make/playwright"*)
          crate_symbols=$crate_symbols"P"
        ;;
      *"cargo-make/cargo-leptos-test"*)
          crate_symbols=$crate_symbols"L"
        ;;
    esac
  done <"./Makefile.toml"

  # Sort list of tools
  sorted_crate_symbols=$(echo ${crate_symbols} | grep -o . | sort | tr -d "\n") 

  formatted_crate_symbols=" ➤ ${BOLD}${YELLOW}${sorted_crate_symbols}${RESET}"
  crate_line=$path
  if [ ! -z ${1+x} ]; then
    # Show all examples
    if [ ! -z $crate_symbols ]; then
      crate_line=$crate_line$formatted_crate_symbols
    fi
    echo $crate_line
  elif [ ! -z $crate_symbols ]; then
    # Filter out examples that do not run tests in `ci`
    crate_line=$crate_line$formatted_crate_symbols
    echo $crate_line
  fi

  cd ${start_path}
done

c="${BOLD}${YELLOW}C${RESET} = Cucumber Test"
f="${BOLD}${YELLOW}F${RESET} = Fantoccini WebDriver"
l="${BOLD}${YELLOW}L${RESET} = Cargo Leptos Test"
p="${BOLD}${YELLOW}P${RESET} = Playwright Test"
r="${BOLD}${YELLOW}R${RESET} = RS Test"
u="${BOLD}${YELLOW}U${RESET} = Unit Test"
w="${BOLD}${YELLOW}W${RESET} = WASM Test"

echo
echo "${ITALIC}Keys:${RESET}\n  $c\n  $f\n  $l\n  $p\n  $r\n  $u\n  $w"
echo
'''

# ALIASES

[tasks.tr]
alias = "test-report"
