import os


def _env_str(key: str, default: str) -> str:
    """Unset or blank env → use default (blank means \"defer to DB / runtime config\")."""
    v = os.getenv(key)
    if v is None:
        return default
    s = str(v).strip()
    return default if s == "" else s


def get_default_system_prompt() -> str:
    return _env_str(
        "MCUBE_SYSTEM_PROMPT",
        "You are a helpful voice AI for real-time phone calls. Reply in short sentences.",
    ).replace("\\n", "\n")


def get_default_mcube_call_config() -> dict[str, str]:
    """
    Fallback MCube call config when DB (`business_id_agents`, `{bid}_bots`) and Redis
    call config do not supply a value. Env vars are optional; empty means use DB/code defaults.

    Single place that reads MCUBE_* tuning keys from the environment.
    """
    return {
        "system_prompt": get_default_system_prompt(),
        "first_message": _env_str("MCUBE_FIRST_MESSAGE", "").strip(),
        "llm_model": _env_str("MCUBE_LLM_MODEL", "openai/gpt-4.1-mini"),
        "llm_provider": _env_str("MCUBE_LLM_PROVIDER", ""),
        "stt_provider": _env_str("MCUBE_STT_PROVIDER", "elevenlabs"),
        "stt_language_code": _env_str("MCUBE_STT_LANGUAGE_CODE", "en"),
        "stt_model_id": _env_str("MCUBE_STT_MODEL_ID", "scribe_v2_realtime"),
        "tts_provider": _env_str("MCUBE_TTS_PROVIDER", "elevenlabs"),
        "tts_model": _env_str("MCUBE_TTS_MODEL", "eleven_turbo_v2_5"),
        "tts_voice_id": _env_str("MCUBE_TTS_VOICE_ID", "EXAVITQu4vr4xnSDxMaL"),
        "tts_encoding": _env_str("MCUBE_TTS_ENCODING", "pcm_16000"),
        # PSTN / bridge tuning (also in business_id_agents.config)
        "tts_chunk_ms": _env_str("MCUBE_TTS_CHUNK_MS", "200"),
        "tts_gain": _env_str("MCUBE_TTS_GAIN", "0.35"),
        "playback_pace_factor": _env_str("MCUBE_PLAYBACK_PACE_FACTOR", "1.0"),
        "checkpoint_every": _env_str("MCUBE_CHECKPOINT_EVERY", "10"),
    }

