DOCKER = docker
DOCKER_COMPOSE = docker-compose
EXEC_PHP = $(DOCKER_COMPOSE) exec -T php
COMPOSER = $(EXEC_PHP) php -d memory_limit=512M /usr/bin/composer
GITHUB_PIPELINE_TOKEN = `cat ~/.ssh/github_token.txt` || true
BRANCH_NAME = `git rev-parse --abbrev-ref HEAD`

.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

build: pull ##Build docker
	@echo "\nBuilding local images...\e[0m"
	@$(DOCKER_COMPOSE) build --build-arg BRANCH_NAME="$(BRANCH_NAME)"

## 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: build up-local vendor

## Up the project and load database on C.I. environment
install-ci: build 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: security-checker composer-unused cs phpstan

## Security check on dependencies
security-checker:
	@echo "\nRunning security checker...\e[0m"
	@$(EXEC_PHP) sh -c "local-php-security-checker" || true

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

## Check if you have unused dependencies
composer-unused:
	@echo "\nRunning composer unused...\e[0m"
	@$(EXEC_PHP) php -d memory_limit=256M /usr/local/src/vendor/bin/composer-unused

## 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
#################################
