#!/bin/bash
# Script de vérification post-installation pour Skull Pi
# À exécuter après reboot

set -euo pipefail

# Couleurs
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

echo -e "${BLUE}🏴‍☠️ Vérification post-installation Skull Pi${NC}"
echo -e "${BLUE}=============================================${NC}"
echo ""

# Vérification du système
echo -e "${YELLOW}📊 Informations système:${NC}"
echo "  OS: $(cat /etc/os-release | grep PRETTY_NAME | cut -d'=' -f2 | tr -d '\"')"
echo "  Kernel: $(uname -r)"
echo "  Architecture: $(uname -m)"
echo "  Hostname: $(hostname)"
echo ""

# Vérification des services
echo -e "${YELLOW}⚙️ Statut des services Skull Pi:${NC}"
SERVICES=("skull.target" "skull-orchestrator" "skull-motion" "skull-vision" "skull-voice" "skull-audioin" "skull-asr" "skull-ai" "mosquitto" "pigpiod")

for service in "${SERVICES[@]}"; do
    if systemctl is-active --quiet "$service" 2>/dev/null; then
        echo -e "  ✅ $service: ${GREEN}ACTIF${NC}"
    elif systemctl is-enabled --quiet "$service" 2>/dev/null; then
        echo -e "  ⚠️  $service: ${YELLOW}INACTIF (mais activé)${NC}"
    else
        if [ "$service" = "pigpiod" ]; then
            echo -e "  ℹ️  $service: ${BLUE}OPTIONNEL${NC}"
        else
            echo -e "  ❌ $service: ${RED}PROBLÈME${NC}"
        fi
    fi
done

echo ""

# Vérification des paquets critiques
echo -e "${YELLOW}📦 Paquets critiques:${NC}"
CRITICAL_PACKAGES=("python3-venv" "python3-pip" "mosquitto" "espeak-ng" "python3-opencv" "python3-pigpio")

for pkg in "${CRITICAL_PACKAGES[@]}"; do
    if dpkg -l "$pkg" >/dev/null 2>&1; then
        echo -e "  ✅ $pkg: ${GREEN}INSTALLÉ${NC}"
    else
        echo -e "  ❌ $pkg: ${RED}MANQUANT${NC}"
    fi
done

echo ""

# Vérification du matériel
echo -e "${YELLOW}🔧 Matériel détecté:${NC}"

# Caméra
if [ -e /dev/video0 ] || libcamera-hello --list-cameras >/dev/null 2>&1; then
    echo -e "  📹 Caméra: ${GREEN}DÉTECTÉE${NC}"
else
    echo -e "  📹 Caméra: ${RED}NON DÉTECTÉE${NC}"
fi

# Audio
if aplay -l >/dev/null 2>&1; then
    echo -e "  🔊 Audio sortie: ${GREEN}DISPONIBLE${NC}"
else
    echo -e "  🔊 Audio sortie: ${RED}PROBLÈME${NC}"
fi

if arecord -l >/dev/null 2>&1; then
    echo -e "  🎤 Audio entrée: ${GREEN}DISPONIBLE${NC}"
else
    echo -e "  🎤 Audio entrée: ${RED}PROBLÈME${NC}"
fi

# GPIO
if [ -e /dev/gpiomem ]; then
    echo -e "  🔌 GPIO: ${GREEN}ACCESSIBLE${NC}"
else
    echo -e "  🔌 GPIO: ${RED}PROBLÈME${NC}"
fi

# I2C/SPI
if [ -e /dev/i2c-1 ]; then
    echo -e "  🔗 I2C: ${GREEN}ACTIVÉ${NC}"
else
    echo -e "  🔗 I2C: ${YELLOW}DÉSACTIVÉ${NC}"
fi

if ls /dev/spidev* >/dev/null 2>&1; then
    echo -e "  🔄 SPI: ${GREEN}ACTIVÉ${NC}"
else
    echo -e "  🔄 SPI: ${YELLOW}DÉSACTIVÉ${NC}"
fi

echo ""

# Test MQTT
echo -e "${YELLOW}📡 Test MQTT:${NC}"
if timeout 5 mosquitto_sub -h 127.0.0.1 -t '$SYS/broker/version' -C 1 >/dev/null 2>&1; then
    echo -e "  ✅ MQTT: ${GREEN}FONCTIONNEL${NC}"
else
    echo -e "  ❌ MQTT: ${RED}PROBLÈME${NC}"
fi

echo ""

# Vérification de l'environnement Python
echo -e "${YELLOW}🐍 Environnement Python:${NC}"
if [ -d "/opt/Skull/venv" ]; then
    echo -e "  ✅ Venv: ${GREEN}CRÉÉ${NC}"
    if source /opt/Skull/venv/bin/activate && python -c "import paho.mqtt.client" >/dev/null 2>&1; then
        echo -e "  ✅ Dépendances: ${GREEN}INSTALLÉES${NC}"
    else
        echo -e "  ❌ Dépendances: ${RED}PROBLÈME${NC}"
    fi
else
    echo -e "  ❌ Venv: ${RED}MANQUANT${NC}"
fi

echo ""

# Vérification des fichiers de configuration
echo -e "${YELLOW}⚙️ Configuration:${NC}"
CONFIG_FILES=("/opt/Skull/config/.env" "/opt/Skull/config/servos.json" "/opt/Skull/config/greet.json")

for file in "${CONFIG_FILES[@]}"; do
    if [ -f "$file" ]; then
        echo -e "  ✅ $(basename "$file"): ${GREEN}PRÉSENT${NC}"
    else
        echo -e "  ❌ $(basename "$file"): ${RED}MANQUANT${NC}"
    fi
done

echo ""

# Vérification des logs
echo -e "${YELLOW}📋 Logs récents:${NC}"
if [ -f "/opt/Skull/logs/orchestrator.log" ]; then
    echo -e "  ✅ Logs: ${GREEN}CRÉÉS${NC}"
    ERROR_COUNT=$(grep -c "ERROR\|Exception\|Failed" /opt/Skull/logs/*.log 2>/dev/null || echo "0")
    if [ "$ERROR_COUNT" -eq 0 ]; then
        echo -e "  ✅ Erreurs: ${GREEN}AUCUNE${NC}"
    else
        echo -e "  ⚠️  Erreurs: ${YELLOW}$ERROR_COUNT trouvées${NC}"
    fi
else
    echo -e "  ❌ Logs: ${RED}MANQUANTS${NC}"
fi

echo ""

# Utilisation des ressources
echo -e "${YELLOW}📈 Ressources système:${NC}"
echo "  CPU Load: $(cat /proc/loadavg | cut -d' ' -f1-3)"
echo "  RAM Usage: $(free -h | grep Mem | awk '{print $3"/"$2" ("$5" libre)"}')"
if command -v vcgencmd >/dev/null 2>&1; then
    echo "  Température: $(vcgencmd measure_temp)"
fi

echo ""

# Résumé et recommandations
echo -e "${BLUE}📝 RÉSUMÉ:${NC}"

# Compter les problèmes
ISSUES=0
if ! systemctl is-active --quiet skull.target; then ((ISSUES++)); fi
if ! systemctl is-active --quiet mosquitto; then ((ISSUES++)); fi
if [ ! -d "/opt/Skull/venv" ]; then ((ISSUES++)); fi

if [ $ISSUES -eq 0 ]; then
    echo -e "  🎉 ${GREEN}Installation RÉUSSIE !${NC}"
    echo -e "  🚀 Skull Pi est prêt à fonctionner"
else
    echo -e "  ⚠️  ${YELLOW}$ISSUES problème(s) détecté(s)${NC}"
    echo -e "  🔧 Consultez les logs: journalctl -u skull-orchestrator"
fi

echo ""
echo -e "${BLUE}🔗 Liens utiles:${NC}"
echo "  - Logs temps réel: journalctl -f -u skull-*"
echo "  - Test MQTT: mosquitto_sub -h 127.0.0.1 -t '#' -v"
echo "  - Interface Web: http://$(hostname -I | awk '{print $1}'):8000 (si configurée)"
echo "  - Redémarrer services: sudo systemctl restart skull.target"
echo "  - Utilisateur configuré: $SKULL_USER"
echo "  - Répertoire projet: /opt/Skull"