SHELL := /bin/bash
CONSOLE := symfony console
COMPOSER := symfony composer
PHPSTAN_CONF := ../../.husky/phpstan-conf.neon

.DEFAULT_GOAL := help

.PHONY: help install start stop stan fixer fixer-fix phpunit assets watch migrate content fixtures test-db check

help: ## Affiche cette aide
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "  \033[36m%-22s\033[0m %s\n", $$1, $$2}'

install: ## Installe les dépendances
	$(COMPOSER) install

start: ## Compile les styles puis démarre le serveur local
	$(CONSOLE) tailwind:build
	symfony server:start -d
	@echo "→ https://127.0.0.1:8000"

stop: ## Arrête le serveur local
	symfony server:stop

watch: ## Recompile les styles à chaque modification
	$(CONSOLE) tailwind:build --watch

migrate: ## Applique les migrations en attente
	$(CONSOLE) doctrine:migrations:migrate --no-interaction

content: ## Réécrit en base le contenu versionné dans content/
	$(CONSOLE) app:content:import

fixtures: ## Charge le contenu et un compte d'administration par les fixtures
	$(CONSOLE) doctrine:fixtures:load --append --no-interaction

test-db: ## (Re)construit la base de test et la remplit
	$(CONSOLE) --env=test doctrine:database:create --if-not-exists
	$(CONSOLE) --env=test doctrine:schema:update --force --complete
	$(CONSOLE) --env=test app:content:import

stan: ## Analyse statique PHPStan
	php vendor/bin/phpstan analyse --configuration=$(PHPSTAN_CONF) --memory-limit=1G

fixer: ## Contrôle du style, sans modification
	php vendor/bin/php-cs-fixer fix --dry-run --diff

fixer-fix: ## Corrige le style
	php vendor/bin/php-cs-fixer fix

phpunit: ## Tests unitaires et fonctionnels PHP
	php vendor/bin/phpunit

assets: ## Compile les feuilles de style, minifiées
	$(CONSOLE) tailwind:build --minify

check: ## Contrôle complet avant revue
	@echo "→ Style"
	@php vendor/bin/php-cs-fixer fix --dry-run --quiet || (echo "  style à corriger : make fixer-fix"; exit 1)
	@echo "→ Analyse statique"
	@php vendor/bin/phpstan analyse --configuration=$(PHPSTAN_CONF) --memory-limit=1G --no-progress
	@echo "→ Gabarits"
	@$(CONSOLE) lint:twig templates
	@echo "→ Conteneur"
	@$(CONSOLE) lint:container
	@echo "→ Configuration"
	@$(CONSOLE) lint:yaml config
	@echo "→ Schéma de la base"
	@$(CONSOLE) doctrine:schema:validate --skip-sync
	@echo "→ Dépendances"
	@$(COMPOSER) audit --no-interaction
	@echo "→ Tests"
	@php vendor/bin/phpunit
	@echo "✓ Tout est vert."
