DOCKER = docker
DOCKER_COMPOSE = docker-compose
EXEC_PHP = $(DOCKER_COMPOSE) exec -T php
COMPOSER = $(EXEC_PHP) php -d memory_limit=512M /usr/bin/composer

.DEFAULT_GOAL := help

help: ## This help dialog.
	@echo "${GREEN}Intranet Inside 2${RESET}"
	@awk '/^[a-zA-Z\-\_0-9]+:/ { \
		helpMessage = match(lastLine, /^## (.*)/); \
		if (helpMessage) { \
			helpCommand = substr($$1, 0, index($$1, ":")); helpMessage = substr(lastLine, RSTART + 3, RLENGTH); \
			printf "  ${YELLOW}%-$(TARGET_MAX_CHAR_NUM)s${RESET} ${GREEN}%s${RESET}\n", helpCommand, helpMessage; \
		} \
		isTopic = match(lastLine, /^###/); \
	    if (isTopic) { printf "\n%s\n", $$1; } \
	} { lastLine = $$0 }' $(MAKEFILE_LIST)

#################################
Docker:

pull:
	@echo "\nPulling local images...\e[0m"
	@$(DOCKER_COMPOSE) pull --quiet

## Up local environment
up-local: ##Up docker
	@$(DOCKER_COMPOSE) -f ./docker-compose.yml -f ./docker-compose.local.yml up -d --remove-orphans

## Up C.I. environment
up-ci: ##Up docker
	@$(DOCKER_COMPOSE) -f ./docker-compose.yml -f ./docker-compose.ci.yml up -d --remove-orphans

## Down environment
down: ##Down docker
	@$(DOCKER_COMPOSE) kill
	@$(DOCKER_COMPOSE) down --remove-orphans

## View output from all containers
logs: ##Logs from docker
	@${DOCKER_COMPOSE} logs -f --tail 0

bash:
	@${DOCKER_COMPOSE} exec php bash

.PHONY: pull build up-local up-ci down logs

#################################
Project:

## Up the project and load database on local environment
install: up-local vendor

## Up the project and load database on C.I. environment
install-ci: up-ci vendor

## Reset the project
reset: down install

## Start containers (unpause)
start:
	@$(DOCKER_COMPOSE) unpause || true
	@$(DOCKER_COMPOSE) start || true

##Stop containers (pause)
stop:
	@$(DOCKER_COMPOSE) pause || true

##Install composer
vendor:
	@echo "\nInstalling composer packages...\e[0m"
	@$(COMPOSER) install

## Update composer
composer-update: composer.json
	@echo "\nUpdating composer packages...\e[0m"
	@$(COMPOSER) update

#################################
Test:

## Launch unit test
unit-test:
	@echo "\nLaunching unit tests\e[0m"
	@$(EXEC_PHP) php -d memory_limit=256M vendor/bin/phpunit tests --coverage-text

#################################
Quality assurance:

## Launch all quality assurance step
code-quality: cs phpstan

## Phpmd
phpmd:
	@echo "\nRunning phpmd...\e[0m"
	@$(EXEC_PHP) phpmd src/ text .phpmd.xml

## PHPStan with higher level
phpstan:
	@echo "\nRunning phpstan...\e[0m"
	@$(EXEC_PHP) phpstan --memory-limit=512M analyse src/ config/ database/ --level 8

## Show cs fixer error
cs:
	@echo "\nRunning cs fixer in dry run...\e[0m"
	@$(EXEC_PHP) php-cs-fixer fix --dry-run --using-cache=no --verbose --diff --config php-cs-fixer.dist.php

## Fix cs fixer error
cs-fix:
	@echo "\nRunning cs fixer...\e[0m"
	@$(EXEC_PHP) php-cs-fixer fix --using-cache=no --verbose --diff --config php-cs-fixer.dist.php
#################################
