include .makefiles/common.mk
include .makefiles/auth.mk

PROJECT = cloudflare-bundle

DOCKER_COMPOSE_OVERRIDE ?= dev
export COMPOSER_PROJECT_NAME=cloudflare-bundle

ifeq (,$(shell which docker))
TB = bash -c
TB_NODEPS = ${TB}
else
TB_OPTS = $(shell [ -t 0 ] || echo '-T')
TB = docker-compose exec $(TB_OPTS) php /scripts/toolbox.sh bash -c
TB_NODEPS = docker-compose run $(TB_OPTS) -e USER_ID=${USER_ID} -e GROUP_ID=${GROUP_ID} --rm --no-deps --entrypoint=/scripts/toolbox.sh php bash -c
endif

## —— Docker 🐳 ———————————————————————————————————————————————————————————————————————

.PHONY: up
up: docker-compose.override.yml ## start the containers
	docker-compose up --detach

.PHONY: build
build: docker-compose.override.yml ## build docker images
	docker-compose build --pull

start: build up ## build and start the containers

.PHONY: down
down: ## Stop local stack
	docker-compose down --remove-orphans

.PHONY: down-full
down-full: docker-compose.override.yml ## Stop local stack and remove volumes and local images
	docker-compose down --remove-orphans --volumes --rmi local

.PHONY: logs
logs:
	docker-compose logs --tail=100 --follow

docker-compose.override.yml: docker-compose.$(DOCKER_COMPOSE_OVERRIDE).yml
	@test -f $@ \
		&& $(call color_text,/!\ $< might have been modified - remove $@ to be up-to-date,31) \
		|| ( echo "Copy $@ from $<"; cp $< $@ )

## —— Application 🖥️  ——————————————————————————————————————————————————————————————————

.PHONY: php_install
php_install:
	$(TB) "composer install"

.PHONY: install
install: php_install

.PHONY: sh
sh: ## open a shell into php container
	$(TB) zsh

## —— Tests ✅ ————————————————————————————————————————————————————————————————————————

.PHONY: test
test: ## Run tests
	@$(eval filter ?= '.')
	$(TB) 'vendor/bin/phpunit --filter=$(filter)'

## —— Coding standards / Quality ✨ ————————————————————————————————————————————————————

.PHONY: quality
quality: phpstan lint rector ## Run every quality check in dry-run

.PHONY: lint
lint: ## Dry-run PHP CS Fixer
	$(TB) 'vendor/bin/php-cs-fixer check --diff'

.PHONY: lint-fix
lint-fix: ## Fix coding standards
	$(TB) 'vendor/bin/php-cs-fixer fix --diff'

.PHONY: phpstan
phpstan: ## Run PHPStan
	$(TB) 'vendor/bin/phpstan analyse --memory-limit=1G'

.PHONY: rector
rector: ## Dry-run Rector
	$(TB) 'vendor/bin/rector process --dry-run'

.PHONY: rector-fix
rector-fix: ## Apply Rector
	$(TB) 'vendor/bin/rector process'

.PHONY: security
security: ## Audit dependencies
	$(TB) 'composer audit'
