#!/usr/bin/env bash

function error_handler() {
  >&2 echo "Exited with BAD EXIT CODE '${2}' in ${0} script at line: ${1}."
  exit "$2"
}
trap 'error_handler ${LINENO} $?' ERR
set -o errtrace -o errexit -o nounset -o pipefail

# see also: npx cypress run --env grep="can filter",grepFilterSpecs=true
# https://github.com/cypress-io/cypress/tree/develop/npm/grep#pre-filter-specs-grepfilterspecs

command="${1:-}"
if [[ -z "$command" ]]; then
  command=open
else
  shift
fi

if [[ -n "${ATTEMPTS:-}" ]]; then
  if [[ "$command" == "open" ]]; then
    echo "ATTEMPTS is ignored when running cypress open"
    ATTEMPTS=1
  fi
else
  ATTEMPTS=1
fi

if [[ -z "${CYPRESS_SPIFFWORKFLOW_FRONTEND_AUTH_WITH_KEYCLOAK:-}" ]]; then
  export CYPRESS_SPIFFWORKFLOW_FRONTEND_AUTH_WITH_KEYCLOAK=true
fi

cypress_run_file="/var/tmp/cypress_run_$(date +%s)"
echo "Recording stats to ${cypress_run_file}"

for attempt in $(seq 1 "$ATTEMPTS" ); do
  echo "Running attempt: ${attempt}"

  start_time=$(date +%s)
  success="false"
  if ./node_modules/.bin/cypress "$command" -c specPattern="cypress/pilot/**/*.cy.{js,jsx,ts,tsx}" --e2e --browser chrome "$@"; then
    success="true"
  fi
  end_time=$(date +%s)

  echo "${success},$(( end_time - start_time ))" >>"$cypress_run_file"
done
echo "Recorded stats to ${cypress_run_file}"