"""Point d'entrée principal du service Voice."""

import sys
import signal
import time
import os
from pathlib import Path

from voice.service import VoiceService
from voice.config import VoiceConfig
from voice.logger import setup_logger


def signal_handler(signum, frame):
    """Gestionnaire de signaux pour arrêt propre."""
    global service
    logger = setup_logger(__name__)
    logger.info(f"Signal {signum} reçu - arrêt du service")

    if service:
        service.stop()

    sys.exit(0)


def ensure_directories():
    """S'assure que les répertoires nécessaires existent."""
    directories = [
        VoiceConfig.LOG_DIR,
        VoiceConfig.ASSETS_DIR,
        os.path.dirname(VoiceConfig.BASE_DIR),
    ]

    for directory in directories:
        Path(directory).mkdir(parents=True, exist_ok=True)


def main():
    """Fonction principale."""
    global service

    # Création des répertoires
    ensure_directories()

    # Setup logger principal
    logger = setup_logger("voice.main")
    logger.info("=== Démarrage du service Skull Voice ===")

    # Handlers de signaux
    signal.signal(signal.SIGINT, signal_handler)
    signal.signal(signal.SIGTERM, signal_handler)

    # Initialisation du service
    service = VoiceService()

    try:
        # Démarrage
        if not service.start():
            logger.error("Impossible de démarrer le service")
            sys.exit(1)

        logger.info("Service Voice démarré avec succès")

        # Boucle principale
        while service.is_running():
            try:
                time.sleep(1.0)

                # Vérification périodique de santé
                if not service.mqtt_handler.is_connected():
                    logger.warning("Connexion MQTT perdue - tentative de reconnexion")
                    service.mqtt_handler.connect()

            except KeyboardInterrupt:
                break

    except Exception as e:
        logger.error(f"Erreur critique: {e}")
        sys.exit(1)

    finally:
        logger.info("Arrêt du service Voice")
        if service:
            service.stop()


# Variables globales pour signal handler
service = None

if __name__ == "__main__":
    main()
