#!/bin/bash

# shellcheck disable=SC2034
declare -r BASHUNIT_VERSION="0.12.0"

readonly BASHUNIT_ROOT_DIR="$(dirname "${BASH_SOURCE[0]}")"
export BASHUNIT_ROOT_DIR

source "$BASHUNIT_ROOT_DIR/src/default_env_config.sh"
source "$BASHUNIT_ROOT_DIR/src/env_configuration.sh"
source "$BASHUNIT_ROOT_DIR/src/check_os.sh"
source "$BASHUNIT_ROOT_DIR/src/state.sh"
source "$BASHUNIT_ROOT_DIR/src/colors.sh"
source "$BASHUNIT_ROOT_DIR/src/console_header.sh"
source "$BASHUNIT_ROOT_DIR/src/console_results.sh"
source "$BASHUNIT_ROOT_DIR/src/helpers.sh"
source "$BASHUNIT_ROOT_DIR/src/upgrade.sh"
source "$BASHUNIT_ROOT_DIR/src/assertions.sh"
source "$BASHUNIT_ROOT_DIR/src/runner.sh"

###############
#### MAIN #####
###############

_FILTER=""
_FILES=()

while [[ $# -gt 0 ]]; do
  argument="$1"
  case $argument in
    -f|--filter)
      _FILTER="$2"
      shift
      shift
      ;;
    -s|--simple)
      SIMPLE_OUTPUT=true
      shift
      ;;
    -v|--verbose)
      SIMPLE_OUTPUT=false
      shift
      ;;
    -S|--stop-on-failure)
      STOP_ON_FAILURE=true
      shift
      ;;
    -e|--env)
      # shellcheck disable=SC1090
      source "$2"
      shift
      shift
      ;;
    --version)
      console_header::print_version
      trap '' EXIT && exit 0
      ;;
    --upgrade)
      upgrade::upgrade
      trap '' EXIT && exit 0
      ;;
    --help)
      console_header::print_help
      trap '' EXIT && exit 0
      ;;
    *)
      while IFS='' read -r line; do
        _FILES+=("$line");
      done < <(helper::find_files_recursive "$argument")
      shift
      ;;
  esac
done

console_header::print_version_with_env
runner::load_test_files "$_FILTER" "${_FILES[@]}"
console_results::render_result

exit 0
