SHELL := /bin/bash
PY ?= .venv/bin/python
SLUG := copilote-vocal
# Ne PAS faire `-include .env` + `export` : .env écraserait les variables passées en ligne de commande.
# Le code Python lit .env lui-même (python-dotenv, sans écraser l'environnement).
PORT ?= $(or $(shell sed -n 's/^PORT=//p' .env 2>/dev/null),8080)

.DEFAULT_GOAL := help
help: ## Liste les commandes
	@grep -hE '^[a-z0-9-]+:.*## ' Makefile | awk -F':.*## ' '{printf "  make %-13s %s\n", $$1, $$2}'

setup: ## Crée .venv et installe les dépendances
	@test -d .venv || python3 -m venv .venv
	@.venv/bin/pip install -q -r requirements.txt
	@test -f .env || cp .env.example .env
	@echo "Prêt. Renseignez GOOGLE_API_KEY dans .env puis : make test"

test: ## Tests sans clé ni réseau (agenda, garde-fous, audio, protocole WebSocket)
	@$(PY) -m pytest -q -p no:cacheprovider -W ignore::UserWarning tests

run: ## Lance l'interface (http://localhost:8080, ou PORT de .env)
	@$(PY) -W ignore::UserWarning -m copilote.serveur

e2e: ## 4 appels réels (fichiers TTS -> Live API) vérifiés sur l'agenda + latences
	@$(PY) -W ignore::UserWarning -m copilote.e2e $(SCENARIOS)

up: ## Lance le serveur dans Docker (docker compose -p lab-copilote-vocal)
	@docker compose -p lab-$(SLUG) up -d --build
	@echo "http://localhost:$(PORT)"

down: ## Arrête la pile Docker et supprime ses volumes
	@docker compose -p lab-$(SLUG) down -v --rmi local 2>/dev/null || true

clean: down ## Supprime les artefacts locaux (agenda, journaux, enregistrements, caches)
	@rm -rf sorties/ .pytest_cache
	@find . -name __pycache__ -type d -prune -exec rm -rf {} +
	@echo "Artefacts supprimés (les appels de test appels/*.wav sont conservés)."

reset: clean ## clean + supprime .venv (.env conservé)
	@rm -rf .venv
	@echo "Environnement supprimé (.env conservé)."

cloud-up: ## Sans objet : le projet tourne en local (clé d'API Gemini ou Vertex AI)
	@echo "Ce projet ne crée aucune ressource Google Cloud : il appelle l'API Gemini ou Vertex AI, rien d'autre."

cloud-down: ## Sans objet : aucune ressource cloud à supprimer
	@echo "Aucune ressource Google Cloud créée par ce projet : rien à supprimer."

cloud-status: ## Sans objet : aucune ressource cloud
	@echo "Aucune ressource Google Cloud pour lab-$(SLUG)."
