# Makefile pour le service Skull Voice
.PHONY: help install test lint format clean deploy logs status

# Configuration
VENV_PATH ?= /opt/Skull/venv
APP_PATH ?= /opt/Skull/apps/voice
SERVICE_NAME = skull-voice

help: ## Affiche cette aide
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'

install: ## Installation complète du service
	@echo "🚀 Installation du service Skull Voice..."
	@sudo mkdir -p /opt/Skull/{apps,logs,bin,venv,assets/audio}
	@sudo chown -R skull:skull /opt/Skull
	@cp -r voice/ /opt/Skull/apps/
	@cp requirements.txt /opt/Skull/apps/voice/
	@cp skull-voice.sh /opt/Skull/bin/
	@sudo chmod +x /opt/Skull/bin/skull-voice.sh
	@sudo cp skull-voice.service /etc/systemd/system/
	@sudo systemctl daemon-reload
	@echo "✅ Installation terminée"

venv: ## Crée et configure l'environnement virtuel
	@echo "🐍 Configuration environnement virtuel..."
	@test -d $(VENV_PATH) || python3 -m venv $(VENV_PATH)
	@$(VENV_PATH)/bin/pip install --upgrade pip
	@$(VENV_PATH)/bin/pip install -r requirements.txt
	@echo "✅ Environnement virtuel prêt"

deps: ## Installe les dépendances système
	@echo "📦 Installation dépendances système..."
	@sudo apt update
	@sudo apt install -y alsa-utils pulseaudio pulseaudio-utils
	@sudo apt install -y espeak-ng espeak-ng-data
	@sudo apt install -y ffmpeg
	@sudo apt install -y mosquitto mosquitto-clients
	@sudo apt install -y python3-dev python3-pip python3-venv
	@sudo usermod -a -G audio,pulse,pulse-access skull || true
	@echo "✅ Dépendances installées"

test: ## Lance les tests unitaires
	@echo "🧪 Lancement des tests..."
	@cd $(APP_PATH) && python -m pytest tests/ -v --cov=voice --cov-report=term-missing

test-fast: ## Tests rapides (sans audio hardware)
	@echo "⚡ Tests rapides..."
	@cd $(APP_PATH) && python -m pytest tests/ -v -m "not audio and not slow"

lint: ## Vérification du code (ruff + mypy)
	@echo "🔍 Analyse du code..."
	@cd $(APP_PATH) && ruff check voice/ tests/
	@cd $(APP_PATH) && mypy voice/

format: ## Formate le code (ruff + black)
	@echo "🎨 Formatage du code..."
	@cd $(APP_PATH) && ruff format voice/ tests/
	@cd $(APP_PATH) && black voice/ tests/

clean: ## Nettoie les fichiers temporaires
	@echo "🧹 Nettoyage..."
	@find . -type f -name "*.pyc" -delete
	@find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
	@find . -type d -name "*.egg-info" -exec rm -rf {} + 2>/dev/null || true
	@find . -name ".coverage" -delete 2>/dev/null || true
	@find . -type d -name "htmlcov" -exec rm -rf {} + 2>/dev/null || true

deploy: install venv ## Déploie le service complet
	@echo "🚀 Déploiement du service..."
	@sudo systemctl enable $(SERVICE_NAME)
	@sudo systemctl start $(SERVICE_NAME)
	@sleep 2
	@make status
	@echo "✅ Service déployé et démarré"

start: ## Démarre le service
	@echo "▶️  Démarrage du service..."
	@sudo systemctl start $(SERVICE_NAME)

stop: ## Arrête le service
	@echo "⏹️  Arrêt du service..."
	@sudo systemctl stop $(SERVICE_NAME)

restart: ## Redémarre le service
	@echo "🔄 Redémarrage du service..."
	@sudo systemctl restart $(SERVICE_NAME)

status: ## Affiche le statut du service
	@echo "📊 Statut du service:"
	@sudo systemctl status $(SERVICE_NAME) --no-pager -l
	@echo ""
	@echo "🔗 Connexion MQTT:"
	@timeout 2 mosquitto_pub -h 127.0.0.1 -p 1883 -t test/connection -m test || echo "❌ MQTT non accessible"

logs: ## Affiche les logs temps réel
	@echo "📋 Logs du service (Ctrl+C pour quitter):"
	@journalctl -u $(SERVICE_NAME) -f --no-pager

logs-json: ## Affiche les logs JSON formatés
	@echo "📋 Logs JSON formatés:"
	@tail -f /opt/Skull/logs/voice.log | jq . --color-output

test-mqtt: ## Test des communications MQTT
	@echo "🔌 Test MQTT..."
	@echo "Écoute des topics (Ctrl+C pour arrêter):"
	@mosquitto_sub -t 'voice/#' -v &
	@mosquitto_sub -t 'audio/#' -v &
	@sleep 1
	@echo "Envoi test TTS..."
	@mosquitto_pub -t voice/tts -m '{"text":"Test MQTT Skull Voice"}'
	@sleep 2
	@echo "Test terminé"

test-tts: ## Test synthèse vocale
	@echo "🗣️  Test TTS..."
	@mosquitto_pub -t voice/tts -m '{"text":"Bonjour, ceci est un test de synthèse vocale !"}'

test-config: ## Test configuration jaw sync
	@echo "⚙️  Test configuration..."
	@mosquitto_pub -t voice/jaw/config -m '{"gain":2.0,"smoothing":0.5,"latency_ms":100}'
	@sleep 1
	@mosquitto_pub -t voice/tts -m '{"text":"Configuration jaw sync mise à jour"}'

monitor: ## Monitor système en temps réel
	@echo "📊 Monitoring système:"
	@echo "CPU/RAM du service:"
	@ps aux | grep voice.main | grep -v grep || echo "Service non trouvé"
	@echo ""
	@echo "Espace disque logs:"
	@du -sh /opt/Skull/logs/ 2>/dev/null || echo "Logs non trouvés"
	@echo ""
	@echo "Audio devices:"
	@aplay -l 2>/dev/null || echo "Pas de devices audio"

backup: ## Sauvegarde de la configuration
	@echo "💾 Sauvegarde..."
	@mkdir -p backup/$(shell date +%Y%m%d_%H%M%S)
	@cp -r voice/ backup/$(shell date +%Y%m%d_%H%M%S)/
	@cp *.txt *.toml *.service *.sh README.md backup/$(shell date +%Y%m%d_%H%M%S)/
	@echo "✅ Sauvegarde créée dans backup/"

health: ## Vérification santé du service
	@echo "🏥 Vérification santé du service:"
	@echo "1. Service systemd:"
	@systemctl is-active $(SERVICE_NAME) && echo "✅ Service actif" || echo "❌ Service inactif"
	@echo "2. Processus Python:"
	@pgrep -f "voice.main" && echo "✅ Processus trouvé" || echo "❌ Processus non trouvé"
	@echo "3. Connexion MQTT:"
	@timeout 2 mosquitto_pub -h 127.0.0.1 -p 1883 -t test -m test && echo "✅ MQTT OK" || echo "❌ MQTT KO"
	@echo "4. Audio système:"