#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail

# Default log level
# shellcheck disable=SC2034
LOG_LEVEL="DEBUG"

# shellcheck source=/dev/null
source "lib/functions/log.sh"

# shellcheck source=/dev/null
source "lib/functions/output.sh"

TEMP_WORKSPACE="$(pwd)/super-linter-output"

function InitWorkspace() {
  CleanupWorkspace
  mkdir -p "${TEMP_WORKSPACE}"
}

function CleanupWorkspace() {
  rm -rf "${TEMP_WORKSPACE}"
}

function CheckIfFileDiff() {
  local INPUT_FILE="${1}"
  local EXPECTED_FILE="${2}"
  # Remove eventual HTML comments from the expected file because we use them to disable certain linter rules
  if ! diff "${INPUT_FILE}" <(grep -vE '^\s*<!--' "${EXPECTED_FILE}"); then
    fatal "${INPUT_FILE} contents don't match with the expected contents (${EXPECTED_FILE})"
  else
    echo "${INPUT_FILE} contents match with the expected contents (${EXPECTED_FILE})"
  fi
}

function WriteSummaryMarkdownTableHeaderTest() {
  local FUNCTION_NAME
  FUNCTION_NAME="${FUNCNAME[0]}"
  info "${FUNCTION_NAME} start"

  local RESULTS_FILE="${TEMP_WORKSPACE}/${FUNCTION_NAME}-output.md"
  InitWorkspace
  WriteSummaryHeader "${RESULTS_FILE}"
  CheckIfFileDiff "${RESULTS_FILE}" "test/data/super-linter-summary/markdown/table/expected-summary-heading.md"
  CleanupWorkspace

  notice "${FUNCTION_NAME} PASS"
}

function WriteSummaryMarkdownTableLineSuccessTest() {
  local FUNCTION_NAME
  FUNCTION_NAME="${FUNCNAME[0]}"
  info "${FUNCTION_NAME} start"

  local RESULTS_FILE="${TEMP_WORKSPACE}/${FUNCTION_NAME}-output-${FUNCTION_NAME}.md"
  InitWorkspace
  WriteSummaryLineSuccess "${RESULTS_FILE}" "Test Language"
  CheckIfFileDiff "${RESULTS_FILE}" "test/data/super-linter-summary/markdown/table/expected-summary-line-success.md"
  CleanupWorkspace

  notice "${FUNCTION_NAME} PASS"
}

function WriteSummaryMarkdownTableLineFailureTest() {
  local FUNCTION_NAME
  FUNCTION_NAME="${FUNCNAME[0]}"
  info "${FUNCTION_NAME} start"

  local RESULTS_FILE="${TEMP_WORKSPACE}/${FUNCTION_NAME}-output-${FUNCTION_NAME}.md"
  InitWorkspace
  WriteSummaryLineFailure "${RESULTS_FILE}" "Test Language"
  CheckIfFileDiff "${RESULTS_FILE}" "test/data/super-linter-summary/markdown/table/expected-summary-line-failure.md"
  CleanupWorkspace

  notice "${FUNCTION_NAME} PASS"
}

function WriteSummaryMarkdownTableFooterSuccessTest() {
  local FUNCTION_NAME
  FUNCTION_NAME="${FUNCNAME[0]}"
  info "${FUNCTION_NAME} start"

  local RESULTS_FILE="${TEMP_WORKSPACE}/${FUNCTION_NAME}-output-${FUNCTION_NAME}.md"
  InitWorkspace
  WriteSummaryFooterSuccess "${RESULTS_FILE}"
  CheckIfFileDiff "${RESULTS_FILE}" "test/data/super-linter-summary/markdown/table/expected-summary-footer-success.md"
  CleanupWorkspace

  notice "${FUNCTION_NAME} PASS"
}

function WriteSummaryMarkdownTableFooterFailureTest() {
  local FUNCTION_NAME
  FUNCTION_NAME="${FUNCNAME[0]}"
  info "${FUNCTION_NAME} start"

  local RESULTS_FILE="${TEMP_WORKSPACE}/${FUNCTION_NAME}-output-${FUNCTION_NAME}.md"
  InitWorkspace
  WriteSummaryFooterFailure "${RESULTS_FILE}"
  CheckIfFileDiff "${RESULTS_FILE}" "test/data/super-linter-summary/markdown/table/expected-summary-footer-failure.md"
  CleanupWorkspace

  notice "${FUNCTION_NAME} PASS"
}

WriteSummaryMarkdownTableHeaderTest
WriteSummaryMarkdownTableLineSuccessTest
WriteSummaryMarkdownTableLineFailureTest
WriteSummaryMarkdownTableFooterSuccessTest
WriteSummaryMarkdownTableFooterFailureTest