#!/usr/bin/env bash

set -euo pipefail

luacov_dir=""

while [[ $# -gt 0 ]]; do
  case "${1}" in
    --clean)
      shift
      echo "[test] cleaning up environment"
      rm -rf ./.testcache
      echo "[test] envionment cleaned"
      ;;
    *)
      shift
      ;;
  esac
done

function setup_environment() {
  echo
  echo "[test] setting up environment"
  echo

  local plugins_dir="./.testcache/site/pack/vendor/start"
  if [[ ! -d "${plugins_dir}" ]]; then
    mkdir -p "${plugins_dir}"
  fi

  if [[ ! -d "${plugins_dir}/nui.nvim" ]]; then
    echo "[plugins] nui.nvim: installing..."
    git clone https://github.com/MunifTanjim/nui.nvim "${plugins_dir}/nui.nvim"
    echo "[plugins] nui.nvim: installed"
    echo
  fi

  if [[ ! -d "${plugins_dir}/nvim-web-devicons" ]]; then
    echo "[plugins] nvim-web-devicons: installing..."
    git clone https://github.com/nvim-tree/nvim-web-devicons "${plugins_dir}/nvim-web-devicons"
    echo "[plugins] nvim-web-devicons: installed"
    echo
  fi

  if [[ ! -d "${plugins_dir}/plenary.nvim" ]]; then
    echo "[plugins] plenary.nvim: installing..."
    git clone https://github.com/nvim-lua/plenary.nvim "${plugins_dir}/plenary.nvim"
    # this commit broke luacov
    #git -C "${plugins_dir}/plenary.nvim" revert --no-commit 9069d14a120cadb4f6825f76821533f2babcab92
    echo "[plugins] plenary.nvim: installed"
    echo
  fi

  echo "[test] environment ready"
  echo
}

function luacov_start() {
  luacov_dir="$(dirname "$(luarocks which luacov 2>/dev/null | head -1)")"
  if [[ "${luacov_dir}" == "." ]]; then
    luacov_dir=""
  fi

  if test -n "${luacov_dir}"; then
    rm -f luacov.*.out
    export LUA_PATH=";;${luacov_dir}/?.lua"
  fi
}

function luacov_end() {
  if test -n "${luacov_dir}"; then
    luacov

    echo
    tail -n +$(($(grep -n "^Summary$" luacov.report.out | cut -d":" -f1) - 1)) luacov.report.out
  fi
}

setup_environment

#luacov_start

make test

#luacov_end