from unittest.mock import MagicMock, patch


class TestEnsureTmdbInit:
    @patch("lib.utils.tmdb_init.get_setting")
    @patch("lib.utils.tmdb_init.TMDb")
    def test_initializes_api_key_and_language(self, MockTMDb, mock_get_setting):
        mock_tmdb = MagicMock()
        MockTMDb.return_value = mock_tmdb
        mock_get_setting.side_effect = lambda key, default=None: {
            "tmdb_api_key": "test-key",
            "language": 20,
        }.get(key, default)

        from lib.utils.tmdb_init import ensure_tmdb_init

        ensure_tmdb_init()

        assert mock_tmdb.api_key == "test-key"
        assert mock_tmdb.language == "es-ES"

    @patch("lib.utils.tmdb_init.get_setting")
    @patch("lib.utils.tmdb_init.TMDb")
    def test_updates_language_on_subsequent_calls(self, MockTMDb, mock_get_setting):
        mock_tmdb = MagicMock()
        MockTMDb.return_value = mock_tmdb

        # First call: English
        mock_get_setting.side_effect = lambda key, default=None: {
            "tmdb_api_key": "test-key",
            "language": 18,
        }.get(key, default)

        from lib.utils.tmdb_init import ensure_tmdb_init

        ensure_tmdb_init()
        assert mock_tmdb.language == "en-US"

        # Second call: Romanian (index 50 in LANGUAGES)
        mock_get_setting.side_effect = lambda key, default=None: {
            "tmdb_api_key": "test-key",
            "language": 50,
        }.get(key, default)

        ensure_tmdb_init()
        assert mock_tmdb.language == "ro-RO"

    @patch("lib.utils.tmdb_init.get_setting")
    @patch("lib.utils.tmdb_init.TMDb")
    def test_invalid_language_index_fallbacks_to_en_us(self, MockTMDb, mock_get_setting):
        mock_tmdb = MagicMock()
        MockTMDb.return_value = mock_tmdb
        mock_get_setting.side_effect = lambda key, default=None: {
            "tmdb_api_key": "test-key",
            "language": 999,
        }.get(key, default)

        from lib.utils.tmdb_init import ensure_tmdb_init

        ensure_tmdb_init()

        assert mock_tmdb.language == "en-US"
