# Add any tasks that are not dependent on files to the .PHONY list.
.PHONY: clean dev env pip_dev lint test test_unit test_integration unit_lint
.PHONY: up_dev down_dev up_deploy down_deploy
.PHONY: docker_unit_lint down_unit_lint ci_unit_lint_clean ci_unit_lint
.PHONY: docker_integration_test down_integration ci_test_integration ci_test_integration_clean

clean:
	rm -rf venv

dev:
	poetry run python dev.py

env:
	poetry install --only main

pip_dev:
	poetry install

lint:
	poetry run ruff check product_digital/ tests/ application.py dev.py

test:
	poetry run py.test tests/ \
		--ignore=tests/integration \
		--cov product_digital \
		--cov-report term-missing

test_unit:
	poetry run py.test \
		--cov product_digital tests/ \
		--cov-report xml \
		--junitxml=pyunit.xml \
		--ignore tests/integration

test_integration:
	poetry run py.test tests/integration --junitxml=pyunit.xml

unit_lint: clean env pip_dev test_unit lint

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

down_dev:
	docker compose down dev

up_deploy:
	docker compose up \
			--detach \
			--remove-orphans \
			deploy

down_deploy:
	docker compose down deploy

docker_unit_lint:
	docker compose up \
		--build \
		--exit-code-from unit-lint \
		--abort-on-container-exit \
		--remove-orphans \
		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:  # Run integration tests in Docker
	docker compose up \
		--build \
		--exit-code-from integration \
		--abort-on-container-exit \
		--remove-orphans \
		integration

down_test_integration:
	docker compose down integration --remove-orphans

ci_test_integration: ci_test_integration_clean  # Run integration tests in CI/CD
	make docker_test_integration

ci_test_integration_clean: down_test_integration  # Teardown integration tests in CI/CD
