# --- Configuration ---
PHP_EXEC = docker compose exec php
CONSOLE = $(PHP_EXEC) php bin/console

# --- Scripts d'automatisation ---
# Note: Ces scripts sont complexes et utilisent '$$' pour échapper le '$' pour Make.

# --- Commandes Docker ---
.PHONY: pull build start stop restart logs logs-php
pull: ## Récupère les dernières images docker
	@docker compose pull
build: ## Construit (ou reconstruit) les images docker du projet
	@docker compose build
start: ## Démarre tous les services en mode détaché
	@docker compose up -d # Ajout de -d pour le mode détaché par défaut
stop: ## Arrête tous les services
	@docker compose down
restart: stop start ## Redémarre tous les services
logs: ## Affiche les logs de tous les services
	@docker compose logs -f
logs-php: ## Affiche les logs du service PHP
	@docker compose logs -f php


# --- Commandes d'Initialisation ---
init: ## Installation initiale du projet (sans Vault/MinIO)
	@make pull
	@make build
	@make start
	@make composer-install
	@sleep 5
	@make db-create
	@make migrate


# --- Commandes Symfony & DB ---
.PHONY: db-create entity migration migrate composer-install deps
db-create: ## Crée la base de données
	@$(CONSOLE) doctrine:database:create --if-not-exists
db-drop: ## Crée la base de données
	@$(CONSOLE) doctrine:database:drop --force
entity: ## Lance la création/mise à jour d'une entité
	@$(CONSOLE) make:entity
migration: ## Génère une nouvelle migration
	@$(CONSOLE) make:migration
migrate: ## Applique les migrations
	@$(CONSOLE) doctrine:migrations:migrate --no-interaction
composer-install: ## Installe les dépendances Composer
	@$(PHP_EXEC) composer install
deps: composer-install ## Alias pour composer-install
db_remove: ## Crée la base de données
	@$(CONSOLE) doctrine:database:drop --force
dbtest_add: ## Crée la base de données
	@$(CONSOLE) doctrine:database:create --env=test
dbtest_migrate: ## Crée la base de données
	@$(CONSOLE) doctrine:migrations:migrate --env=test --no-interaction
dbtest_remove: ## Crée la base de données
	@$(CONSOLE) doctrine:database:drop --env=test --force

test: ## Lance les tests via Docker
	@$(PHP_EXEC) bin/phpunit

test-prepare: ## Prépare la base de données de test (création + schema update)
	@$(CONSOLE) doctrine:database:create --env=test --if-not-exists
	@$(CONSOLE) doctrine:schema:update --force --env=test

# --- Aide ---
.PHONY: help
help: ## Affiche cet écran d'aide
	@echo "Commandes disponibles mainframe :"
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'

.DEFAULT_GOAL := help

gitlab_build:
	docker build -t tools-registry.esy-web.dev/mainframe/mainframe:php docker/php
	docker push tools-registry.esy-web.dev/mainframe/mainframe:php
