"""Unit tests for RAG i18n name conversion.

Tests cover:
- _to_i18n_name() static method
"""

from __future__ import annotations

from importlib import import_module


def get_kbmgr_module():
    """Lazy import to avoid circular import issues."""
    return import_module('langbot.pkg.rag.knowledge.kbmgr')


class TestToI18nName:
    """Tests for _to_i18n_name static method."""

    def test_string_input_wrapped(self):
        """Test that string input is wrapped into i18n dict."""
        kbmgr = get_kbmgr_module()
        result = kbmgr.RAGManager._to_i18n_name('Test Engine')
        assert result == {'en_US': 'Test Engine', 'zh_Hans': 'Test Engine'}

    def test_dict_input_preserved(self):
        """Test that dict input is returned as-is."""
        kbmgr = get_kbmgr_module()
        input_dict = {'en_US': 'English Name', 'zh_Hans': '中文名', 'ja_JP': '日本語名'}
        result = kbmgr.RAGManager._to_i18n_name(input_dict)
        assert result == input_dict
        assert result is input_dict  # Should return the same object

    def test_empty_string_handling(self):
        """Test that empty string is handled correctly."""
        kbmgr = get_kbmgr_module()
        result = kbmgr.RAGManager._to_i18n_name('')
        assert result == {'en_US': '', 'zh_Hans': ''}

    def test_none_input_handling(self):
        """Test that None is converted to string 'None'."""
        kbmgr = get_kbmgr_module()
        result = kbmgr.RAGManager._to_i18n_name(None)
        assert result == {'en_US': 'None', 'zh_Hans': 'None'}

    def test_number_input_converted_to_string(self):
        """Test that numbers are converted to strings."""
        kbmgr = get_kbmgr_module()
        result = kbmgr.RAGManager._to_i18n_name(123)
        assert result == {'en_US': '123', 'zh_Hans': '123'}

    def test_dict_with_partial_keys_preserved(self):
        """Test that dict with only some i18n keys is preserved."""
        kbmgr = get_kbmgr_module()
        input_dict = {'en_US': 'Only English'}
        result = kbmgr.RAGManager._to_i18n_name(input_dict)
        assert result == {'en_US': 'Only English'}

    def test_dict_with_extra_keys_preserved(self):
        """Test that dict with extra non-i18n keys is preserved."""
        kbmgr = get_kbmgr_module()
        input_dict = {'en_US': 'English', 'extra_key': 'extra_value'}
        result = kbmgr.RAGManager._to_i18n_name(input_dict)
        assert result == {'en_US': 'English', 'extra_key': 'extra_value'}
