export DD_ENV ?= qa
export CONFIG_FILE ?= qa
export FINAL_JOB_NAME := $(shell \
    if [ "$(word 1,$(subst /, ,$(JOB_NAME)))" = "theorchard" ]; then \
        echo $(JOB_NAME) | sed 's/^theorchard\///' | sed 's/\//-/g'; \
    else \
        echo $(JOB_NAME) | sed 's/\//-/g'; \
    fi \
)
export CONTAINER_NAME = ${FINAL_JOB_NAME}-${BUILD_NUMBER}

# # Function to check whether a param is set or not 
define check_and_append
$(eval var_value := $(strip $($(1))))
$(if $(var_value),\
    $(if $(filter $(var_value),null),\
        $(info $(1) equals null),\
        $(info $(1) is set $($(1));) \
				$(eval params := $(params) $(1)="$($(1))")),\
)
endef

finalCommand = ${params} node framework/src/runFramework.js

log_params:
	$(info DD_ENV: $(DD_ENV))
	$(info TAGS: $(TAGS))
	$(info JOB_NAME: $(FINAL_JOB_NAME))
	$(info BUILD_ID: $(BUILD_ID))
	$(info CONFIG_FILE: $(CONFIG_FILE))
	$(info DELAY: $(DELAY))
	$(info TRIES: $(TRIES))
	$(info DEBUG: $(DEBUG))
	$(info CYPRESS_TEST_WISE: $(CYPRESS_TEST_WISE))
	$(info CYPRESS_OVERRIDE_FRONTEND_HOST: $(CYPRESS_OVERRIDE_FRONTEND_HOST))
	$(info CYPRESS_DEFAULT_COMMAND_TIMEOUT: $(CYPRESS_DEFAULT_COMMAND_TIMEOUT))
	$(info NO_VIDEO: $(NO_VIDEO))
	$(info REPORT_TITLE: $(REPORT_TITLE))

prepare_framework_params: 
	$(call check_and_append,TAGS)
	$(call check_and_append,JOB_NAME)
	$(call check_and_append,FINAL_JOB_NAME)
	$(call check_and_append,BUILD_ID)
	$(call check_and_append,DELAY)
	$(call check_and_append,TRIES)
	$(call check_and_append,DEBUG)
	$(call check_and_append,CYPRESS_TEST_WISE)
	$(call check_and_append,NO_VIDEO)
	$(call check_and_append,DD_ENV)
	$(call check_and_append,CYPRESS_OVERRIDE_FRONTEND_HOST)
	$(call check_and_append,CYPRESS_DEFAULT_COMMAND_TIMEOUT)
	$(call check_and_append,CONFIG_FILE)
	$(call check_and_append,REPORT_TITLE)
	$(info params: $(params))

clean_reports:
	rm -rf logs || true
	rm -rfv cypress/results || true

start_datadog_logger:
	node helpers/datadogLoggerServer.js &

initialise_env: start_datadog_logger clean_reports prepare_framework_params

collect_parallel_results:
	node framework/src/collectParallelResults.js

# ECS parallel
# Cypress Test Runs
cypress_run_one_parallel_rerun:
	${params} ./scripts/runCypressOneInParallelRerun.sh 

cypress_run_parallel: initialise_env
	${finalCommand}

linter:
	yarn lint

#only check the files that have been changed
prettier:
	@echo "Checking formatting for changed files..."
	git diff --name-only --diff-filter=d origin/master...HEAD | xargs npx prettier --check --cache-location .prettier

prettier-write:
	@echo "Fixing formatting for changed files..."
	@git diff --name-only --diff-filter=d origin/master...HEAD | xargs npx prettier --write

jenkins_pre_commit:
	./frameworkRunner.sh make pre_commit UNIT_TEST=${UNIT_TEST} MODIFIED_PACKAGES=${MODIFIED_PACKAGES}

pre_commit: linter prettier check_scenario_ids
	if [ "${MODIFIED_PACKAGES}" = "true" ]; then \
		yarn install --cwd framework; \
	fi
	if [ "${UNIT_TEST}" = "true" ]; then \
		make unit_test; \
 	fi


refresh_secrets:
	./scripts/checkEnv.sh true

update_secrets:
	./scripts/updateAwsSecret.sh

initialise_parallel_env:
	yarn check:env
	make clean_reports

normalise_db_ids:
	node ./scripts/normaliseAutoIncrement.js

build_and_test_docker_container:
	docker build -f Dockerfile -t cypresstest .
	make test_docker_container

test_docker_container:
	make clean_reports
	docker rm cytest || true
	docker run --name cytest -v "${HOME}/.aws/credentials:/root/.aws/credentials:ro" --privileged cypresstest /bin/bash -c "make initialise_parallel_env && make cypress_run_auth0" || true
	docker cp cytest:cypress/results cypress/results

validate_json_files:
	sh scripts/validateJsonFiles.sh

# test the framework to make sure changes introduced are not breaking main functionalities of framework itself
framework_smoke_test:
	make validate_json_files

delete_all_auth0_tokens_from_s3:
	aws s3 rm --recursive s3://qa-orcd-cypress-tests/auth0/

clean_docker_containers:
	docker ps -aq --filter "name=${CONTAINER_NAME}" | xargs -r docker container stop ${CONTAINER_NAME} || true

unit_test:
	npx jest --silent -c framework/unit_tests/jest.config.js

new_ecs_run:
	node framework/src/runFramework.js

configure_husky_hooks:
	git config --local core.hooksPath .husky

check_scenario_ids:
	./scripts/checkScenarioIds.sh

normalizeArtRelationsVendor:
	node ./scripts/normalizeVendorTable.js

abacus_delete_runcontrollers:
	node ./scripts/abacusDeleteRuncontrollers.js
	node ./scripts/abacusDeleteContracts.js

abacus_delete_contracts:
	node ./scripts/abacusDeleteContracts.js

abacus_close_accounting_periods:
	node ./scripts/abacusCloseAccountingPeriods.js

abacus_set_exchange_rates:
	node ./scripts/abacusSetExchangeRates.js

abacus_set_mechanical_rates:
	node ./scripts/abacusSetMechanicalRates.js

abacus_accounting_run_setup: abacus_delete_runcontrollers abacus_delete_contracts abacus_close_accounting_periods abacus_set_exchange_rates abacus_set_mechanical_rates
