IMPORT_USER ?= user
JIRA_TICKET ?= ACC-XXXX
OVERWRITE ?= true
SKIP_CONTRACT_IMPORT ?= false
SKIP_ACCOUNT_IMPORT ?= false


.PHONY: clean env dev_env pip_lock_versions lint test \
	test_unit unit_lint_job docker_local_up docker_local_down local_event \
	docker_test docker_test_up docker_test_down \
	test_integration docker_test_integration_up docker_test_integration_down \
	docker_ows_up docker_ows_down docker_login \
	test_integration docker_down

clean:
	if [ -f report.html ]; then rm -r report.html; fi
	rm -rf env .coverage .pytest_cache .cache coverage.xml pyunit.xml
	find . | grep -E '__pycache__|\.pyc|\.pyo$\' | xargs rm -rf

env:
	python3.11 -m venv env
	env/bin/python -m pip install -q -U pip setuptools wheel
	env/bin/python -m pip install -q -I -r requirements.txt

dev_env: env
	if [ ! -f env/bin/py.test ]; then env/bin/python -m pip install -q -r requirements.txt -r requirements-dev.txt; fi

pip_lock_versions: clean
	python3.11 -m venv env
	env/bin/python -m pip install -q -U pip setuptools wheel
	env/bin/python -m pip install -q -I -r requirements-to-freeze.txt
	echo "-i https://pypi.theorchard.io/pypi/" > requirements.txt
	env/bin/python -m pip freeze >> requirements.txt

lint: dev_env
	env/bin/python -m flake8 \
		app.py \
		json_contract_file_import \
		tests/

test: dev_env
	env/bin/python -m pytest tests/unit \
		--cov app \
		--cov json_contract_file_import \
		--cov-report term-missing

docker_local_up: docker_db_up
	docker compose up --build -d function

docker_local_down: docker_db_down
	docker compose down function --volumes --remove-orphans

local_event:
	curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" \
	   -d '{ \
	   "import_user": "$(IMPORT_USER)", \
	   "jira_ticket": "$(JIRA_TICKET)", \
	   "overwrite": $(OVERWRITE), \
	   "skip_contract_import": $(SKIP_CONTRACT_IMPORT), \
	   "skip_account_import": $(SKIP_ACCOUNT_IMPORT) \
	 }'

test_unit: dev_env
	env/bin/python -m pytest tests/unit \
		--ignore=tests/integration \
		--cov app \
		--cov json_contract_file_import \
		--cov-report xml \
		--junitxml=pyunit.xml

unit_lint_job: clean lint test_unit

docker_test: docker_test_down docker_test_up

docker_test_up:
	docker compose up \
		--exit-code-from lint-and-test \
		--abort-on-container-exit \
		--build lint-and-test

docker_test_down:
	docker compose down lint-and-test --volumes --remove-orphans

docker_ows_down:
	docker compose down json-contract-file-import-mysql --volumes --remove-orphans
	docker compose down json-contract-import-liquibase-runner --volumes --remove-orphans
	docker compose down json-contract-import-ows-abacus-account --volumes --remove-orphans
	docker compose down json-contract-import-ows-royalties --volumes --remove-orphans
	docker compose down json-contract-file-import-lambda --volumes --remove-orphans

sync_docker:
	docker compose pull

docker_ows_up:
	docker compose up -d json-contract-file-import-mysql
	docker compose up json-contract-import-liquibase-runner
	docker compose up -d json-contract-import-ows-abacus-account
	docker compose up -d json-contract-import-ows-royalties
	docker compose up -d json-contract-file-import-lambda

test_integration: docker_login docker_ows_down sync_docker docker_ows_up
	# python3.11 tests/integration/utils/cleanup_s3_test_files.py
	docker compose up \
		--exit-code-from integration-test \
		--abort-on-container-exit \
		--build integration-test

docker_db_up:
	docker compose up -d json-contract-file-import-mysql
	docker compose up json-contract-import-liquibase-runner

docker_db_down:
	docker compose down json-contract-file-import-mysql --volumes --remove-orphans
	docker compose down json-contract-import-liquibase-runner --volumes --remove-orphans

docker_login:
	aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 437795906767.dkr.ecr.us-east-1.amazonaws.com
	aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 086679231553.dkr.ecr.us-east-1.amazonaws.com

# REVIEW: We're keeping those commands for now since they're used by CI.
# We might remove them once we migrate to the Jenkinsfile
docker_down: docker_test_down
