include .env

#
# Default target, will run when executing make without arguments
#
.PHONY: check
check: cs stan test

#
# General
#
.PHONY: init
init: docker-init vendor

.PHONY: dist-clean
dist-clean: docker-clean project-clean vendor-clean

.PHONY: dist-fresh
dist-fresh: dist-clean init

#
# Tools
#
.PHONY: cs
cs: vendor
	@./scripts/phpcs.sh

.PHONY: stan
stan: vendor
	@./scripts/phpstan.sh analyse

.PHONY: test
test: vendor
	@./scripts/phpunit.sh

.PHONY: test-compatibility
test-compatibility: build-additional-test-images
	PHP_VERSION=7.4 ./scripts/phpunit.sh
	PHP_VERSION=8.0 ./scripts/phpunit.sh
	PHP_VERSION=8.1 ./scripts/phpunit.sh

#
# dotenv
#
.env:
	@cp .env.example .env
	@echo "HOST_USER_UID=$(shell id -u)" >> .env
	@echo "HOST_USER_GID=$(shell id -g)" >> .env
	@read -p "Enter project name: " project_name; \
		sed -i -e "s/COMPOSE_PROJECT_NAME=/COMPOSE_PROJECT_NAME=$${project_name}/g" .env

#
# Composer
#
vendor: composer.json
	@$(MAKE) composer-install

.PHONY: composer-install
composer-install:
	@./scripts/tools.sh composer install

.PHONY: vendor-clean
vendor-clean:
	@-rm -rf ./vendor/
	@-rm -f ./composer.lock

#
# Docker
#
.PHONY: up
up:
	@docker-compose --profile dev-environment up -d

.PHONY: down
down:
	@docker-compose down

.PHONY: docker-init
docker-init: build-images xdebug-ini

.PHONY: docker-clean
docker-clean: down remove-xdebug-ini remove-containers remove-images

.PHONY: build-images
build-images: build-tools-image

.PHONY: build-tools-image
build-tools-image:
	@docker build \
        --pull \
		--build-arg PHP_VERSION=7.4 \
		-t "${COMPOSE_PROJECT_NAME}-tools-7.4" \
		./docker/php/tools/

.PHONY: build-additional-test-images
build-additional-test-images:
	@docker build \
        --pull \
		--build-arg PHP_VERSION=8.0 \
		-t "${COMPOSE_PROJECT_NAME}-tools-8.0" \
		./docker/php/tools/
	@docker build \
        --pull \
		--build-arg PHP_VERSION=8.1 \
		-t "${COMPOSE_PROJECT_NAME}-tools-8.1" \
		./docker/php/tools/

.PHONY: xdebug-ini
xdebug-ini:
	@./scripts/tools.sh ./scripts/generate-xdebug-ini.sh > ./xdebug.ini

.PHONY: remove-containers
remove-containers:
	@./scripts/remove-containers.sh "${COMPOSE_PROJECT_NAME}_*"

.PHONY: remove-images
remove-images:
	@./scripts/remove-images.sh "${COMPOSE_PROJECT_NAME}-*"

.PHONY: remove-xdebug-ini
remove-xdebug-ini:
	@-rm -f ./xdebug.ini

#
# Project
#
.PHONY: project-clean
project-clean:
