.PHONY: default
default: help

# -----------------------------------
# Variables
# -----------------------------------
user := $(shell id -u)
group := $(shell id -g)
dc := USER_ID=$(user) GROUP_ID=$(group) docker compose -f ../../compose.yaml

.PHONY: help
help:
	@echo Tasks:
	@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)

# -----------------------------------
# Docker Compose
# -----------------------------------
FORCE:
.PHONY: build
build: ## Build & start docker containers for development
	$(dc) build && \
	$(dc) up -d
	$(dc) run --rm php composer install && \
	$(dc) run --rm php bin/console c:c

.PHONY: ssh
ssh: ## SSH into container
	$(dc) exec php bash

.PHONY: start
start: ## Start docker containers
	$(dc) --env-file .env.local up -d

.PHONY: restart
restart: ## Restart docker containers
	$(dc) restart

.PHONY: stop
stop: ## Stop docker containers
	$(dc) stop

.PHONY: logs
logs: ## Show logs of docker containers
	@$(dc) logs --tail=0 --follow

.PHONY: destroy
destroy: ## Destroy docker containers
	$(dc) kill && \
	$(dc) rm -f

# -----------------------------------
# CI / CD
# -----------------------------------
.PHONY: lint
lint: ## code quality analysis
	$(dc) run --rm php composer app:cs

.PHONY: test
test: ## unit and functional tests
	$(dc) run --rm php composer app:test
	#$(dc) run --rm php composer app:behat

.PHONY: audit
audit: ## security audit
	$(dc) run --rm php composer audit

.PHONY: deploy
deploy: ## Deployment tasks
	/usr/bin/php ~/composer.phar install --optimize-autoloader
	/usr/bin/php bin/console doctrine:database:create --if-not-exists
	/usr/bin/php bin/console doctrine:migrations:migrate --no-interaction --allow-no-migration --all-or-nothing
	/usr/bin/php bin/console cache:clear --env=prod
	/usr/bin/php bin/console secrets:decrypt-to-local --env=prod
	/usr/bin/php ~/composer.phar symfony:dump-env prod

# -----------------------------------
# Symfony
# -----------------------------------
.PHONY: migrate
migrate: ## Run migrations
	$(dc) run --rm php bin/console doctrine:databases:create --if-not-exists
	$(dc) run --rm php bin/console doctrine:migrations:migrate --no-interaction

.PHONY: cache
cache: ## Clear cache
	$(dc) run --rm php bin/console cache:clear
	$(dc) run --rm php bin/console cache:warmup

# -----------------------------------
# Dependencies
# -----------------------------------
.PHONY: deps
deps: ## Install dependencies
	$(dc) run --rm php composer install
	$(dc) run --rm node yarn install --force
	$(dc) run --rm node yarn build
