# Add any tasks that are not dependent on files to the .PHONY list.
.PHONY: clean dev_env env dev pip_dev lint test test_unit \
	test_integration pip_lock_versions up_dev down_dev docker_unit_lint \
	down_unit_lint ci_unit_lint ci_unit_lint_clean docker_test_integration \
	ci_test_integration

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

dev:
	python dev.py

pip_dev:
	pip install --upgrade pip
	pip install -r requirements.txt
	pip install -r requirements-dev.txt

lint:
	flake8 ows_accounting/ tests/

test_unit:
	pytest \
		--ignore=tests/integration \
		--cov ows_accounting tests/ \
		--cov-report xml \
		--junitxml=pyunit.xml

test_integration:
	pytest tests/integration --reruns 1

pip_lock_versions:
	rm -rf env
	python -m venv ./env
	env/bin/pip install --upgrade pip
	env/bin/pip install -r requirements-to-freeze.txt
	echo "-i https://pypi.theorchard.io/pypi/" > requirements.txt
	env/bin/pip freeze >> requirements.txt
	env/bin/pip install -r requirements-dev.txt

up_dev:
	docker compose up \
		--detach \
		--remove-orphans \
	ows-accounting-dev

down_dev:
	docker compose down ows-accounting-dev

up_deploy:
	docker compose up \
		--build \
		--detach \
		--remove-orphans \
		ows-accounting-deploy

down_deploy:
	docker compose down ows-accounting-deploy

docker_unit_lint:
	docker compose run --build --rm unit-lint

down_unit_lint:
	docker compose down unit-lint --remove-orphans

ci_unit_lint: ci_unit_lint_clean
	mkdir -p build
	chmod a+w build
	make docker_unit_lint

ci_unit_lint_clean: down_unit_lint
	rm -rf build

docker_test_integration:
	docker compose run --build --rm test-integration

ci_test_integration: docker_test_integration

ci_test_integration_proxy:
	cd ows_accounting_proxy && ./test.sh
