.DEFAULT_GOAL := help

.PHONY: help
help:  ## Show help
	@grep -E '^[\.a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) \
	| awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'

.PHONY: env_file
env_file:  ## Generate .gen.env file from env with "LENOCHKA_" prefix.
	touch .gen.env && env | grep -E '^LENOCHKA_' > ".gen.env" || echo "No env vars"
	test -f .env && cat .env > .gen.env || echo ".env file not found"

.PHONY: build
build: env_file ## Build docker container image.
	docker-compose \
	-f ./deploy/docker-compose.yml \
	--project-directory . \
	build --pull lenochka

.PHONY: build_test
build-test: ## Build image for tests.
	docker-compose \
	-f ./deploy/docker-compose.test.yml \
	--project-directory . \
	build --no-cache test_lenochka

.PHONY: flake8
flake8:  ## Run flake8 check
	docker-compose \
	-f ./deploy/docker-compose.test.yml \
	--project-directory . \
	run test_lenochka flake8 --count .

.PHONY: black
black:  ## Run black check
	docker-compose \
	-f ./deploy/docker-compose.test.yml \
	--project-directory . \
	run test_lenochka black --check .

.PHONY: mypy
mypy: ## Run pytest tests
	docker-compose \
	-f ./deploy/docker-compose.test.yml \
	--project-directory . \
	run test_lenochka mypy .

.PHONY: pytest
pytest: ## Run pytest tests
	docker-compose \
	-f ./deploy/docker-compose.test.yml \
	--project-directory . \
	run test_lenochka pytest -v --cov=lenochka

.PHONY: push
push: env_file ## Push container to the registry.
	docker-compose \
	-f ./deploy/docker-compose.yml \
	--project-directory . \
	push lenochka

.PHONY: pull
pull: env_file  ## Download images from docker hub.
	docker-compose \
	    -f deploy/docker-compose.yml \
	    --project-directory . \
	    pull --ignore-pull-failures lenochka \
	|| \
	docker-compose \
	    -f deploy/docker-compose.yml \
	    --project-directory . \
	    pull lenochka

.PHONY: deploy-prod
deploy-prod: pull  ## deploy container in production.
	docker-compose \
	-f ./deploy/docker-compose.yml \
	--project-directory . \
	up -d

.PHONY: clear-test
clear-test:  ## Remove containers and images for test
	docker-compose \
	-f ./deploy/docker-compose.test.yml \
	--project-directory . \
	down --rmi=all
