"""Configuration du service voice."""

import os
from typing import Dict, Any


class VoiceConfig:
    """Configuration centralisée."""

    # Chemins
    BASE_DIR = "/opt/Skull/apps/voice"
    LOG_DIR = "/opt/Skull/logs"
    ASSETS_DIR = "/opt/Skull/assets/audio"

    # MQTT
    MQTT_HOST = "127.0.0.1"
    MQTT_PORT = 1883
    MQTT_KEEPALIVE = 60

    # Topics MQTT
    TOPICS = {
        # Entrées
        "tts": "voice/tts",
        "mp3_play": "voice/mp3/play",
        "mp3_stop": "voice/mp3/stop",
        "mp3_pause": "voice/mp3/pause",
        "mp3_resume": "voice/mp3/resume",
        "jaw_config": "voice/jaw/config",
        # Sorties
        "viseme": "audio/viseme",
        "rms": "audio/rms",
        "state": "voice/state",
        "capabilities": "voice/capabilities",
    }

    # Audio
    SAMPLE_RATE = 22050
    FRAME_SIZE = 20  # ms
    RMS_FILTER_LOW = 200  # Hz
    RMS_FILTER_HIGH = 3000  # Hz

    # eSpeak-NG
    ESPEAK_VOICE = "fr"
    ESPEAK_SPEED = 175  # mots/min
    ESPEAK_PITCH = 50

    # Jaw sync defaults
    DEFAULT_JAW_CONFIG = {"gain": 1.0, "smoothing": 0.3, "latency_ms": 120}

    # Logs
    LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
    LOG_LEVEL = "INFO"

    @classmethod
    def get_log_file(cls) -> str:
        """Retourne le chemin du fichier de log."""
        return os.path.join(cls.LOG_DIR, "voice.log")

    @classmethod
    def get_env_config(cls) -> Dict[str, Any]:
        """Configuration depuis variables d'environnement."""
        return {
            "mqtt_host": os.getenv("MQTT_HOST", cls.MQTT_HOST),
            "mqtt_port": int(os.getenv("MQTT_PORT", cls.MQTT_PORT)),
            "log_level": os.getenv("LOG_LEVEL", cls.LOG_LEVEL),
            "sample_rate": int(os.getenv("SAMPLE_RATE", cls.SAMPLE_RATE)),
        }
