#!make
include .dockerenv.dist
-include .dockerenv

### Variable ###

# Composer
COMPOSER=$(PHP_AS_USER) composer

# Detect OS
UNAME_S:=$(shell uname -s)

# OS Specific
ifeq ($(UNAME_S),Darwin)
	SED=sed -i ''
	CUID=1000
	CGID=1000
else
	SED=sed -i
	CUID=$(shell id -u)
	CGID=$(shell id -g)
endif

# Docker
D=docker
DC=$(subst $\",,$(DOCKER_COMPOSE)) --env-file .dockerenv -p $(PROJECT_NAME) -f $(DC_DEV_FILEPATH) -f $(DC_DEV_OVERRIDE_FILEPATH)
DCE=$(DC) exec
DCB=DOCKER_BUILDKIT=1 $(DC) build
DCU=DOCKER_BUILDKIT=1 $(DC) up -d --wait
DCUB=DOCKER_BUILDKIT=1 $(DC) up --build -d --wait
DCD=$(DC) down
DC_DEV_FILEPATH=./hosting/docker-compose.dev.yaml
DC_DEV_OVERRIDE_FILEPATH=./hosting/docker-compose.dev.override.yaml
USER=www-data

# Execute commands as root
PHP_AS_ROOT=$(DCE) -it $(PHP_CONTAINER)

# Execute commands as user
PHP_AS_USER=$(DCE) -u $(USER) $(PHP_CONTAINER)

# Project name
PROJECT_NAME=$(shell basename $(CURDIR))

# Docker containers name
PHP_CONTAINER=api-client-php

# Linux
BASH = bash

# Symfony
PHP_BIN_CONSOLE=$(PHP_AS_USER) php bin/console

### Commands ###
# Equals to docker compose build
build:
	$(DCB)

# Fix code style
cs-fix:
	$(PHP_AS_USER) php vendor/bin/php-cs-fixer fix --allow-risky=yes
	$(PHP_AS_USER) php vendor/bin/phpstan analyse -c phpstan.neon lib/ --xdebug
	$(PHP_AS_USER) php vendor/bin/psalm --no-cache --show-info=true

# Display the current directory name in snakgfdgdfghe case
current-dirname-snake:
	echo "$(shell basename $(CURDIR) | sed -r 's/([a-z0-9])([A-Z])/\1_\L\2/g' | sed -r 's/-/_/g')"

# Equals to docker compose down
down:
	$(DCD)

# Configure project
configure:
	if [ ! -f .dockerenv ]; \
	then \
		cp .dockerenv.dist .dockerenv; \
		$(SED) "s/\?=/=/" ".dockerenv"; \
		$(SED) "s/UID=.*/UID=$(CUID)/" ".dockerenv"; \
		$(SED) "s/GID=.*/GID=$(CGID)/" ".dockerenv"; \
	fi
	$(shell test -f $(DC_DEV_OVERRIDE_FILEPATH) || touch $(DC_DEV_OVERRIDE_FILEPATH))

run-sonar-qube:
	$(D) run --pull always --rm \
        --volume "$(shell pwd):/usr/src" \
        sonarsource/sonar-scanner-cli

run-test:
	$(PHP_AS_USER) composer run phpunit-coverage
	$(PHP_AS_USER) sed -i 's/\/var\/www\///' phpunit-coverage.xml phpunit-result.xml

# Start project
start:
	$(DCUB)

	#Install dependencies
	$(COMPOSER) install --prefer-dist

	@echo Done.

# Equals to docker compose up -d
up:
	$(DCU)

### Containers access ###

# To go in containers as root
php-root:
	$(PHP_AS_ROOT) bash

# To go in containers as user
php:
	$(PHP_AS_USER) bash

make == make start
.DEFAULT_GOAL := start

# Git
git-delete-feature:
	git branch -D $(shell git branch | grep feature/*)

git-delete-hotfix:
	git branch -D $(shell git branch | grep hotfix/*)

jane-generate: configure
	$(PHP_AS_USER) php bin/merge_docs.php
	$(PHP_AS_USER) php bin/jane_generate.php generate --config-file=config/all.php
	rm -rf ./gen # bug jane create a gen empty directory after generate
	$(PHP_AS_USER) composer run quality
	@echo Jane files have been generated !

update:
	COMMIT=$$(git rev-parse HEAD); \
	git pull; \
	if [ "$$COMMIT" != $$(git rev-parse HEAD) ]; \
	then \
		$(MAKE); \
	fi

# Fix code style, check code quality
pre-push:
	rm -rf ./.cache/*
	$(PHP_AS_USER) composer run quality
	$(PHP_AS_USER) composer run phpunit-coverage
	$(PHP_AS_USER) sed -i 's/\/var\/www\///' phpunit-coverage.xml phpunit-result.xml
	$(MAKE) run-sonar-qube

# DEV Only
deploy-iam:
	cp -r ./lib/* ../iam/vendor/noahvet/reef-api-client/lib/

deploy-bsm:
	cp -r ./lib/* ../bsm/vendor/noahvet/reef-api-client/lib/

deploy-portal:
	cp -r ./lib/* ../portal/vendor/noahvet/reef-api-client/lib/

update-dev-images:
	docker build -t gitlab.vetinweb.com:5050/reef/api-client/php:dev --pull --target dev --network=host -f hosting/php/Dockerfile .

hard-reset:
	rm -rf vendor config/all.json .dockerenv
