# Makefile pour le service ASR Skull Pi

.PHONY: help install test clean lint format check deploy

# Variables
PYTHON := python3
PIP := pip
VENV_PATH := /opt/Skull/venv
APP_PATH := /opt/Skull/apps/asr
SERVICE_NAME := skull-asr

# Couleurs
GREEN := \033[32m
BLUE := \033[34m
YELLOW := \033[33m
RED := \033[31m
RESET := \033[0m

help: ## Affiche cette aide
	@echo "$(BLUE)Service ASR Skull Pi - Commandes disponibles:$(RESET)"
	@echo ""
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "  $(GREEN)%-15s$(RESET) %s\n", $$1, $$2}'

install: ## Installe les dépendances
	@echo "$(BLUE)Installation des dépendances...$(RESET)"
	$(PIP) install -r requirements.txt
	@echo "$(GREEN)✓ Dépendances installées$(RESET)"

install-dev: install ## Installe les dépendances de développement
	@echo "$(BLUE)Installation des dépendances de développement...$(RESET)"
	$(PIP) install -e .[dev]
	@echo "$(GREEN)✓ Environnement de développement prêt$(RESET)"

test: ## Lance les tests unitaires
	@echo "$(BLUE)Exécution des tests...$(RESET)"
	pytest -v
	@echo "$(GREEN)✓ Tests terminés$(RESET)"

test-cov: ## Lance les tests avec couverture
	@echo "$(BLUE)Tests avec couverture...$(RESET)"
	pytest --cov=asr --cov-report=term --cov-report=html
	@echo "$(GREEN)✓ Rapport de couverture généré$(RESET)"

test-integration: ## Lance uniquement les tests d'intégration
	@echo "$(BLUE)Tests d'intégration...$(RESET)"
	pytest tests/test_integration.py -v
	@echo "$(GREEN)✓ Tests d'intégration terminés$(RESET)"

lint: ## Vérifie le code avec ruff
	@echo "$(BLUE)Vérification du code...$(RESET)"
	ruff check asr/ tests/
	@echo "$(GREEN)✓ Code vérifié$(RESET)"

format: ## Formate le code avec black
	@echo "$(BLUE)Formatage du code...$(RESET)"
	black asr/ tests/
	@echo "$(GREEN)✓ Code formaté$(RESET)"

type-check: ## Vérifie les types avec mypy
	@echo "$(BLUE)Vérification des types...$(RESET)"
	mypy asr/
	@echo "$(GREEN)✓ Types vérifiés$(RESET)"

check: lint type-check test ## Lance toutes les vérifications (lint + types + tests)
	@echo "$(GREEN)✓ Toutes les vérifications passées$(RESET)"

clean: ## Nettoie les fichiers temporaires
	@echo "$(BLUE)Nettoyage...$(RESET)"
	find . -type f -name "*.pyc" -delete
	find . -type d -name "__pycache__" -delete
	find . -type d -name "*.egg-info" -exec rm -rf {} +
	rm -rf .pytest_cache/
	rm -rf .mypy_cache/
	rm -rf htmlcov/
	rm -rf dist/
	rm -rf build/
	@echo "$(GREEN)✓ Nettoyage terminé$(RESET)"

# Commandes de déploiement
install-service: ## Installe le service systemd
	@echo "$(BLUE)Installation du service systemd...$(RESET)"
	sudo cp systemd/$(SERVICE_NAME).service /etc/systemd/system/
	sudo cp bin/$(SERVICE_NAME).sh /opt/Skull/bin/
	sudo chmod +x /opt/Skull/bin/$(SERVICE_NAME).sh
	sudo systemctl daemon-reload
	@echo "$(GREEN)✓ Service installé$(RESET)"

enable-service: install-service ## Active et démarre le service
	@echo "$(BLUE)Activation du service...$(RESET)"
	sudo systemctl enable $(SERVICE_NAME)
	sudo systemctl start $(SERVICE_NAME)
	@echo "$(GREEN)✓ Service activé et démarré$(RESET)"

status: ## Affiche le statut du service
	@echo "$(BLUE)Statut du service $(SERVICE_NAME):$(RESET)"
	sudo systemctl status $(SERVICE_NAME) --no-pager

logs: ## Affiche les logs du service
	@echo "$(BLUE)Logs du service $(SERVICE_NAME):$(RESET)"
	sudo journalctl -u $(SERVICE_NAME) -f

restart: ## Redémarre le service
	@echo "$(BLUE)Redémarrage du service...$(RESET)"
	sudo systemctl restart $(SERVICE_NAME)
	@echo "$(GREEN)✓ Service redémarré$(RESET)"

stop: ## Arrête le service
	@echo "$(BLUE)Arrêt du service...$(RESET)"
	sudo systemctl stop $(SERVICE_NAME)
	@echo "$(YELLOW)Service arrêté$(RESET)"

# Tests manuels
test-mqtt: ## Test rapide MQTT
	@echo "$(BLUE)Test MQTT - Abonnement aux topics ASR...$(RESET)"
	@echo "$(YELLOW)Appuyez sur Ctrl+C pour arrêter$(RESET)"
	mosquitto_sub -t 'asr/#' -v

test-vad: ## Simule des événements VAD
	@echo "$(BLUE)Simulation VAD actif...$(RESET)"
	mosquitto_pub -t audio/vad -m '{"active": true}'
	@sleep 2
	@echo "$(BLUE)Simulation fin de phrase...$(RESET)"
	mosquitto_pub -t audio/vad -m '{"end_of_speech": true}'
	@echo "$(GREEN)✓ Événements VAD envoyés$(RESET)"

test-config: ## Test de configuration dynamique
	@echo "$(BLUE)Test configuration EOS timeout...$(RESET)"
	mosquitto_pub -t asr/config -m '{"eos_ms": 1500}'
	@echo "$(GREEN)✓ Configuration envoyée$(RESET)"

# Installation du modèle Vosk
download-model: ## Télécharge le modèle Vosk français
	@echo "$(BLUE)Téléchargement du modèle Vosk français...$(RESET)"
	sudo mkdir -p /opt/Skull/models
	cd /opt/Skull/models && \
	sudo wget -O vosk-model-fr.zip https://alphacephei.com/vosk/models/vosk-model-fr-0.22-lgraph.zip && \
	sudo unzip vosk-model-fr.zip && \
	sudo rm vosk-model-fr.zip
	@echo "$(GREEN)✓ Modèle Vosk installé$(RESET)"

check-model: ## Vérifie la présence du modèle Vosk
	@echo "$(BLUE)Vérification du modèle Vosk...$(RESET)"
	@if [ -d "/opt/Skull/models/vosk-model-fr-0.22-lgraph" ]; then \
		echo "$(GREEN)✓ Modèle Vosk français trouvé$(RESET)"; \
		ls -la /opt/Skull/models/vosk-model-fr-0.22-lgraph/ | head -10; \
	else \
		echo "$(RED)✗ Modèle Vosk français non trouvé$(RESET)"; \
		echo "$(YELLOW)Utilisez 'make download-model' pour l'installer$(RESET)"; \
	fi

# Développement
dev: install-dev ## Configure l'environnement de développement
	@echo "$(GREEN)✓ Environnement de développement configuré$(RESET)"
	@echo "$(BLUE)Commandes utiles:$(RESET)"
	@echo "  make test     - Lance les tests"
	@echo "  make check    - Vérifie le code (lint + types + tests)"
	@echo "  make format   - Formate le code"

watch: ## Lance les tests en mode watch
	@echo "$(BLUE)Tests en mode watch (pytest-watch)...$(RESET)"
	@echo "$(YELLOW)Les tests se relancent automatiquement$(RESET)"
	ptw

deploy: check install-service enable-service ## Déploiement complet
	@echo "$(GREEN)✓ Déploiement terminé avec succès$(RESET)"

# Règle par défaut
.DEFAULT_GOAL := help