from __future__ import annotations


SCENARIO_DESCRIPTIONS = {
    "clean": "Audio base sem degradacao; serve como linha de referencia do STT.",
    "low_volume": "Mesmo audio com ganho reduzido para simular fala baixa ou captura distante.",
    "very_low_volume": "Mesmo audio com ganho muito baixo para testar limite de audibilidade do STT.",
    "high_volume": "Mesmo audio com ganho elevado, sem clipping esperado, para simular fala forte.",
    "clipped_high_volume": "Audio com ganho alto o suficiente para provocar clipping e distorcao.",
    "leading_trailing_silence": "Audio com silencio antes e depois da fala para validar recorte/VAD.",
    "short_leading_silence": "Pequeno silencio antes da fala para validar inicio com pouca margem.",
    "long_leading_silence": "Silencio longo antes da fala para observar trim e tempo de ativacao.",
    "noise_snr_20": "Audio com ruido leve, SNR 20 dB, para medir robustez inicial.",
    "noise_snr_15": "Audio com ruido moderado, SNR 15 dB, para observar degradacao.",
    "noise_snr_10": "Audio com ruido forte, SNR 10 dB, para identificar limite de tolerancia.",
    "pre_noise_300ms": "Ruido curto antes da fala para simular ambiente aberto antes do enunciado.",
    "pre_noise_800ms": "Ruido mais longo antes da fala para testar se preprocessors confundem inicio.",
    "telephony_profile": "Audio passado por perfil telefonico simples via u-law para simular compressao.",
    "telephony_low_volume": "Perfil telefonico combinado com volume baixo.",
    "initial_fade_in_250ms": "Ataque inicial suavizado por 250 ms para simular primeira palavra fraca.",
    "initial_fade_in_500ms": "Ataque inicial suavizado por 500 ms para estressar captura do prefixo.",
    "initial_fade_in_900ms": "Ataque inicial suavizado por 900 ms, perto do prefix padding local.",
    "initial_dip_300ms": "Primeiros 300 ms com ganho baixo, depois volume normal.",
    "initial_dip_700ms": "Primeiros 700 ms com ganho baixo, simulando pergunta iniciada fraca.",
    "prefix_300ms_15pct": "Prefixo de 300 ms muito baixo para observar corte de inicio curto.",
    "prefix_600ms_20pct": "Prefixo de 600 ms baixo para simular 'Por que' sem energia.",
    "prefix_900ms_25pct": "Prefixo de 900 ms baixo, limite interessante para padding de 1s.",
    "low_prefix_noise_600ms": "Prefixo baixo com ruido, combinando fala fraca e ambiente ruidoso.",
    "low_prefix_telephony_700ms": "Prefixo baixo com perfil telefonico para simular URA/telefonia.",
    "short": "Sintese curta no xAI TTS para validar resposta basica, volume e latencia.",
    "long": "Sintese longa no xAI TTS para validar estabilidade e duracao plausivel.",
    "reuse_1": "Primeira repeticao curta para observar reuso da conexao websocket do xAI.",
    "reuse_2": "Segunda repeticao curta para confirmar reuso continuo da conexao websocket do xAI.",
}


def scenario_base_name(name: str) -> str:
    value = str(name or "").strip()
    if "_r" in value:
        prefix, suffix = value.rsplit("_r", 1)
        if suffix.isdigit():
            return prefix
    return value


def scenario_description(name: str) -> str:
    return SCENARIO_DESCRIPTIONS.get(scenario_base_name(name), "")
