.PHONY: help
help:
	@grep -E -e '^[a-zA-Z0-9%_-]+:.*?## .*$$' -e '^###' $(MAKEFILE_LIST) \
		| awk '\
			BEGIN {FS = ":.*?## "} \
			/:.*?##/ {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2} \
			/###/ {printf "\033[35m%-30s\033[0m\n", $$0} \
			'

### Application

.PHONY: collectors-ext
collectors-ext: ## Build collectors-ext using ya make
	../../ya make . -j $(shell nproc) --force-build-depends


### Images

.PHONY: db_image_context
db_image_context:
	mkdir -p $(docker_context_root)/db/sql
	cp -r db/code $(docker_context_root)/db/sql/
	cp -r db/grants $(docker_context_root)/db/sql/
	cp -r db/migrations $(docker_context_root)/db/sql/
	cp -r db/deploy/local/* $(docker_context_root)/db/

.PHONY: collectors_image_context
collectors_image_context: collectors-ext
	mkdir -p $(docker_context_root)/collectors/install/usr/sbin/
	cp -r deploy $(docker_context_root)/collectors/
	cp collectors-ext $(docker_context_root)/collectors/install/usr/sbin/
	cp Dockerfile $(docker_context_root)/collectors/
	cp -r etc $(docker_context_root)/collectors/deploy/
	echo "dev" > $(docker_context_root)/collectors/deploy/etc/environment.name
	cp tests-system/docker/entrypoint.sh $(docker_context_root)/collectors/install/usr/sbin/entrypoint.sh

.PHONY: collectors_import_image_context
collectors_import_image_context: collectors_image_context
	deploy/usr/share/collectors-ext/oauth_token_loader/get_secrets $(docker_context_root)/collectors/deploy/usr/share/collectors-ext/oauth_token_loader/config
	mkdir -p $(docker_context_root)/collectors/deploy/usr/bin/
	cp ../../ya $(docker_context_root)/collectors/deploy/usr/bin/

.PHONY: db_image
db_image: docker_context_root := $(shell mktemp -d)
db_image: db_image_context ## Create database image
	docker build --pull --network=host --tag collectors_db:local $(docker_context_root)/db

.PHONY: collectors_image
collectors_image: docker_context_root := $(shell mktemp -d)
collectors_image: collectors_image_context ## Create collectors image
	docker build --force-rm --pull --network=host --build-arg installdir=install --build-arg deploydir=deploy --tag collectors:local $(docker_context_root)/collectors


### Docker compose

.PHONY: containers
containers: docker_context_root := $(shell mktemp -d)
containers: db_image_context collectors_image_context ## Setup all containers in docker-compose (use cached images and data)
	$(eval export db=$(docker_context_root)/db)
	$(eval export collectors=$(docker_context_root)/collectors)
	$(eval export $(shell tests-system/get_secrets/get_secrets tvm_secret))
	$(eval export test_env=production)
	docker-compose -f tests-system/docker/docker-compose.yml up --detach

.PHONY: containers-import
containers-import: docker_context_root := $(shell mktemp -d)
containers-import: db_image_context collectors_import_image_context ## Setup all containers in docker-compose (use cached images and data)
	$(eval export db=$(docker_context_root)/db)
	$(eval export collectors=$(docker_context_root)/collectors)
	$(eval export $(shell tests-system/get_secrets/get_secrets tvm_secret))
	$(eval export test_env=import)
	docker-compose -f tests-system/docker/docker-compose.yml up --detach

.PHONY: containers-rebuild
containers-rebuild: docker_context_root := $(shell mktemp -d)
containers-rebuild: db_image_context collectors_image_context ## Setup all containers in docker-compose (rebuilding docker images and volumes)
	$(eval export db=$(docker_context_root)/db)
	$(eval export collectors=$(docker_context_root)/collectors)
	$(eval export $(shell tests-system/get_secrets/get_secrets tvm_secret))
	$(eval export test_env=production)
	docker-compose -f tests-system/docker/docker-compose.yml up --build --force-recreate --renew-anon-volumes --detach

.PHONY: containers-import-rebuild
containers-import-rebuild: docker_context_root := $(shell mktemp -d)
containers-import-rebuild: db_image_context collectors_import_image_context ## Setup all containers in docker-compose (rebuilding docker images and volumes)
	$(eval export db=$(docker_context_root)/db)
	$(eval export collectors=$(docker_context_root)/collectors)
	$(eval export $(shell tests-system/get_secrets/get_secrets tvm_secret))
	$(eval export test_env=import)
	docker-compose -f tests-system/docker/docker-compose.yml up --build --force-recreate --renew-anon-volumes --detach

### Tests

.PHONY: tests-system-over-containers
tests-system-over-containers: collectors-ext containers ## Run system tests without ya make
	rm -rf testing_out_stuff
	mkdir testing_out_stuff
	./tests-system/mail-collectors-ext-tests-system

.PHONY: tests-system-over-import-containers
tests-system-over-import-containers: collectors-ext containers-import ## Run system tests without ya make
	rm -rf testing_out_stuff
	mkdir testing_out_stuff
	./tests-system/mail-collectors-ext-tests-system

.PHONY: tests-system
tests-system: collectors-ext ## Run system tests using ya make
	$(eval export $(shell tests-system/get_secrets/get_secrets tvm_secret))
	../../ya make -t --test-size=LARGE
