# Makefile pour le service audioin - Skull Pi
.PHONY: help install test lint clean deploy status logs

# Variables
SKULL_ROOT = /opt/Skull
APP_NAME = audioin
SERVICE_NAME = skull-audioin
VENV_PATH = $(SKULL_ROOT)/venv
APP_PATH = $(SKULL_ROOT)/apps/$(APP_NAME)
LOG_PATH = $(SKULL_ROOT)/logs/$(APP_NAME).log

help:  ## Affiche cette aide
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'

install:  ## Installe les dépendances
	pip install -r requirements.txt
	pip install -e .[dev]

test:  ## Lance les tests unitaires
	pytest -v

test-cov:  ## Lance les tests avec coverage
	pytest --cov=audioin --cov-report=term-missing --cov-report=html

lint:  ## Vérifie le code (ruff + mypy)
	ruff check audioin/
	ruff format --check audioin/
	mypy audioin/

lint-fix:  ## Corrige automatiquement le formatage
	ruff format audioin/
	ruff check --fix audioin/

clean:  ## Nettoie les fichiers temporaires
	find . -type f -name "*.pyc" -delete
	find . -type d -name "__pycache__" -delete
	rm -rf .coverage htmlcov/ .pytest_cache/
	rm -rf build/ dist/ *.egg-info/

# Déploiement
deploy:  ## Déploie le service sur le système
	@echo "Déploiement du service $(APP_NAME)..."
	sudo mkdir -p $(APP_PATH)
	sudo cp -r audioin/ $(APP_PATH)/
	sudo cp requirements.txt $(APP_PATH)/
	sudo cp skull-audioin.sh $(SKULL_ROOT)/bin/
	sudo cp skull-audioin.service /etc/systemd/system/
	sudo chmod +x $(SKULL_ROOT)/bin/skull-audioin.sh
	sudo chown -R skull:skull $(APP_PATH)
	sudo systemctl daemon-reload
	@echo "Service déployé. Utiliser 'make enable' et 'make start' pour l'activer."

enable:  ## Active le service au démarrage
	sudo systemctl enable $(SERVICE_NAME)
	@echo "Service $(SERVICE_NAME) activé au démarrage"

disable:  ## Désactive le service au démarrage  
	sudo systemctl disable $(SERVICE_NAME)
	@echo "Service $(SERVICE_NAME) désactivé"

start:  ## Démarre le service
	sudo systemctl start $(SERVICE_NAME)
	@echo "Service $(SERVICE_NAME) démarré"

stop:  ## Arrête le service
	sudo systemctl stop $(SERVICE_NAME)
	@echo "Service $(SERVICE_NAME) arrêté"

restart:  ## Redémarre le service
	sudo systemctl restart $(SERVICE_NAME)
	@echo "Service $(SERVICE_NAME) redémarré"

status:  ## Affiche le statut du service
	sudo systemctl status $(SERVICE_NAME)

logs:  ## Affiche les logs du service
	sudo journalctl -u $(SERVICE_NAME) -f

logs-app:  ## Affiche les logs applicatifs JSON
	tail -f $(LOG_PATH) | jq .

# Tests manuels
test-audio:  ## Teste les devices audio disponibles
	python -m audioin.main --list-devices

test-mqtt:  ## Teste la connexion MQTT
	@echo "Test publication MQTT..."
	mosquitto_pub -t test/audioin -m "Test depuis Makefile"
	@echo "Écoute des métriques (Ctrl+C pour arrêter):"
	mosquitto_sub -t 'audio/#' -v

test-config:  ## Teste la configuration VAD dynamique
	@echo "Test configuration VAD..."
	mosquitto_pub -t audio/vad/config -m '{"threshold": 0.25, "attack_ms": 60}'
	@echo "Configuration publiée. Vérifier les logs pour confirmation."

# Monitoring
monitor:  ## Monitor temps réel des métriques
	@echo "Monitoring des métriques audio (Ctrl+C pour arrêter):"
	mosquitto_sub -t 'audio/rms' -t 'audio/vad' | while read line; do \
		echo "[$(date '+%H:%M:%S')] $$line"; \
	done

stats:  ## Affiche les statistiques du service
	@echo "=== Statistiques Système ==="
	@echo "CPU/Mémoire du service:"
	@ps aux | grep -E "(audioin|skull-audioin)" | grep -v grep || echo "Service non trouvé"
	@echo ""
	@echo "=== Statistiques Audio ==="
	@echo "Derniers logs RMS/VAD:"
	@tail -5 $(LOG_PATH) | jq -r 'select(.rms_avg or .vad_state) | "\(.timestamp) - \(.message) (\(.rms_avg // .vad_state))"' 2>/dev/null || echo "Pas de logs trouvés"

# Diagnostic
check-deps:  ## Vérifie les dépendances système
	@echo "=== Vérification dépendances ==="
	@echo "Python:"
	@python3 --version || echo "❌ Python non trouvé"
	@echo "Devices ALSA:"
	@aplay -l | grep -i respeaker || echo "❌ ReSpeaker non détecté"
	@echo "MQTT Broker:"
	@mosquitto_pub -t test -m "test" && echo "✅ MQTT OK" || echo "❌ MQTT indisponible"
	@echo "Dépendances Python:"
	@python3 -c "import sounddevice, paho.mqtt.client, numpy; print('✅ Dépendances OK')" || echo "❌ Dépendances manquantes"

check-config:  ## Vérifie la configuration
	@echo "=== Vérification configuration ==="
	@echo "Répertoires:"
	@ls -la $(SKULL_ROOT)/apps/audioin/ 2>/dev/null | head -3 || echo "❌ App non déployée"
	@echo "Service systemd:"
	@systemctl list-unit-files | grep $(SERVICE_NAME) || echo "❌ Service non installé"
	@echo "Logs:"
	@ls -la $(LOG_PATH) 2>/dev/null || echo "❌ Fichier log absent"

# Nettoyage système
uninstall:  ## Désinstalle complètement le service
	@echo "Désinstallation du service $(SERVICE_NAME)..."
	-sudo systemctl stop $(SERVICE_NAME)
	-sudo systemctl disable $(SERVICE_NAME)
	-sudo rm -f /etc/systemd/system/$(SERVICE_NAME).service
	-sudo rm -f $(SKULL_ROOT)/bin/skull-audioin.sh
	-sudo rm -rf $(APP_PATH)
	sudo systemctl daemon-reload
	@echo "Service désinstallé"

# Développement
dev-setup:  ## Configuration environnement de développement
	python -m venv venv
	./venv/bin/pip install -e .[dev]
	@echo "Environnement de dev configuré. Activer avec: source venv/bin/activate"

dev-run:  ## Lance le service en mode développement
	@echo "Lancement en mode développement..."
	PYTHONPATH=. python audioin/main.py --verbose --log-file ./dev.log

dev-mqtt:  ## Lance un broker MQTT de développement
	@echo "Lancement broker MQTT de développement (port 1883)..."
	mosquitto -v

# CI/CD
ci:  ## Pipeline CI complète
	$(MAKE) lint
	$(MAKE) test-cov
	@echo "✅ Pipeline CI réussie"

package:  ## Crée un package de déploiement
	@echo "Création package de déploiement..."
	rm -rf dist/
	mkdir -p dist/skull-audioin/
	cp -r audioin/ dist/skull-audioin/
	cp requirements.txt pyproject.toml README.md dist/skull-audioin/
	cp skull-audioin.sh skull-audioin.service Makefile dist/skull-audioin/
	cd dist && tar -czf skull-audioin-$(shell date +%Y%m%d).tar.gz skull-audioin/
	@echo "Package créé: dist/skull-audioin-$(shell date +%Y%m%d).tar.gz"