"""Tests for config module."""
import os
import pytest
from src.config import (
    EnvConfig, LANGUAGE_MAP, SUPPORTED_LANGUAGES, AUDIO_EVENT_TAGS,
    get_config, PROMPT_VERSION, SCHEMA_VERSION,
)


def test_language_map_has_12_languages():
    assert len(LANGUAGE_MAP) == 12
    assert set(SUPPORTED_LANGUAGES) == {"hi", "mr", "te", "ta", "kn", "ml", "gu", "pa", "bn", "as", "or", "en"}


def test_language_map_tuple_structure():
    for code, (name, script, hint) in LANGUAGE_MAP.items():
        assert isinstance(name, str) and len(name) > 0
        assert isinstance(script, str) and len(script) > 0
        assert isinstance(hint, str) and len(hint) > 0


def test_audio_event_tags():
    assert len(AUDIO_EVENT_TAGS) == 10
    assert "laugh" in AUDIO_EVENT_TAGS
    assert "noise" in AUDIO_EVENT_TAGS


def test_env_config_mock_mode():
    config = EnvConfig(mock_mode=True)
    assert config.mock_mode is True
    errors = config.validate()
    assert len(errors) == 0


def test_env_config_missing_keys():
    os.environ["MOCK_MODE"] = "false"
    os.environ.pop("GEMINI_KEY", None)
    os.environ.pop("GEMINI_PROJECT2", None)
    os.environ.pop("GEMINI_PROJECT3", None)
    os.environ.pop("URL", None)
    os.environ.pop("R2_ENDPOINT_URL", None)
    config = EnvConfig()
    config.mock_mode = False
    config.gemini_key = ""
    config.gemini_keys = []
    config.supabase_url = ""
    config.r2_endpoint_url = ""
    errors = config.validate()
    assert len(errors) >= 3
    os.environ.pop("MOCK_MODE", None)


def test_version_constants():
    assert PROMPT_VERSION
    assert SCHEMA_VERSION
