.PHONY: clean dev_env run \
	test test_unit lint test_integration \
	pip_lock_versions \
	unit_lint_job \
	sync_docker start_ows docker_down \
	local_listener local_event

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

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

env:
	python3.13 -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

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

pip_lock_versions: clean
	python3.13 -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

run: dev_env
	env/bin/python dev.py

start_db: 
	docker compose up -d commit-royalties-mysql
	docker compose up commit-royalties-liquibase-runner

start_ows: docker_down sync_docker
	docker compose up -d commit-royalties-mysql
	docker compose up commit-royalties-liquibase-runner
	docker compose up -d commit-royalties-ledger
	docker compose up -d commit-royalties-royalties
	docker compose up -d commit-royalties-abacus-state
	docker compose up -d commit-royalties

docker_down:
	docker compose down --remove-orphans

sync_docker:
	docker compose pull

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

local_listener:
	docker build . -t abacus/commit_royalties
	docker run -d -p 9000:8080 abacus/commit_royalties:latest

local_event:
	curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" \
		-d '{"abacus_event_id":1,"target_type":"accounting_period","target_id":"1420","event_name":"commit-royalties","event_date":"1997-07-16T19:20:30.45+01:00"}'

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

unit_lint_job: clean lint test_unit

test_integration: start_ows
	docker compose up \
		--exit-code-from integration-test \
		--abort-on-container-exit \
		--build integration-test

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

docker_local_up:
	docker compose up --build -d function

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