.DEFAULT_GOAL := help

COMPOSE = docker compose -f docker-compose.yml -f docker-compose.override.yml

.PHONY: system_setup
system_setup:  ## setup system deps
	@lefthook install

.PHONY: setup
setup: system_setup  ## setup project
	@mkdir -p priv/plts
	@mix do local.rebar --force, local.hex --force
	@mix do deps.get, deps.compile
	@mix dialyzer --plt

.PHONY: check_format
check_format:  ## run format checker
	@mix format --check-formatted

.PHONY: check_compile
check_compile:  ## run compile
	@mix compile --warnings-as-errors --force

.PHONY: credo
credo:  ## run credo
	@mix credo suggest --strict --format=flycheck

.PHONY: dialyzer
dialyzer:  ## run dialyzer
	@mix dialyzer --no-check --quiet --ignore-exit-status --format short

.PHONY: static_code_analysis
static_code_analysis: check_format check_compile credo dialyzer  ## run static code analysis

.PHONY: test
test:  ## run tests
	@mix test --cover --trace --slowest 10

.PHONY: compose_database_create
compose_database_create:
	@$(COMPOSE) run --rm --entrypoint mix app ecto.create

.PHONY: compose_database_migrate
compose_database_migrate:  ## apply migrations to our database
	@$(COMPOSE) run --rm --entrypoint mix app ecto.migrate

.PHONY: compose_database_setup
compose_database_setup: compose_database_create compose_database_migrate  ## create and apply migrations

.PHONY: compose_ps
compose_ps:  ## status of containers
	@$(COMPOSE) ps

.PHONY: compose_remote
compose_remote:  ## connect to remote node
	@$(COMPOSE) exec app ./priv/docker/service/docker-remote.sh

.PHONY: compose_test
compose_test:  ## execute test on docker environment
	@$(COMPOSE) --profile test run --build --rm test

.PHONY: compose_test_shell
compose_test_shell:  ## enter test environment shell
	@$(COMPOSE) --profile test run --rm --entrypoint bash test -c bash

.PHONY: compose_up
compose_up:  ## start containers for this service
	@$(COMPOSE) up -d

.PHONY: compose_watch
compose_watch:  ## start containers for this service watching for updates in filesystem
	@$(COMPOSE) up -w

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