from unittest.mock import patch

from lib.gui.base_window import BaseWindow


class _DummyWindow(BaseWindow):
    def handle_action(self, action_id, control_id=None):
        return None


def test_set_cached_focus_uses_window_property_not_addon_setting():
    window = _DummyWindow("dummy.xml", "")
    window.CACHE_KEY = "focus-key"

    with patch("lib.gui.base_window.xbmcgui.Window") as xbmc_window, patch(
        "lib.gui.base_window.ADDON"
    ) as addon:
        win = xbmc_window.return_value
        win.getProperty.return_value = ""

        window.set_cached_focus(1000, 5)

    addon.setSetting.assert_not_called()
    win.setProperty.assert_called_once()
    prop_name, prop_value = win.setProperty.call_args[0]
    assert prop_name.startswith("jacktook.focus.")
    assert prop_value == "[1000, 5]"


def test_get_cached_focus_migrates_legacy_addon_setting_to_window_property():
    window = _DummyWindow("dummy.xml", "")
    window.CACHE_KEY = "legacy-focus-key"

    with patch("lib.gui.base_window.xbmcgui.Window") as xbmc_window, patch(
        "lib.gui.base_window.ADDON"
    ) as addon:
        win = xbmc_window.return_value
        win.getProperty.return_value = ""
        addon.getSetting.return_value = "[1000, 7]"

        control_id, item_id = window.get_cached_focus()

    assert control_id == 1000
    assert item_id == 7
    addon.getSetting.assert_called_once_with("legacy-focus-key")
    addon.setSetting.assert_called_once_with("legacy-focus-key", "")
    win.setProperty.assert_called_once()


def test_get_cached_focus_returns_empty_when_cache_key_missing():
    window = _DummyWindow("dummy.xml", "")
    window.CACHE_KEY = ""

    with patch("lib.gui.base_window.xbmcgui.Window") as xbmc_window, patch(
        "lib.gui.base_window.ADDON"
    ) as addon:
        control_id, item_id = window.get_cached_focus()

    assert control_id is None
    assert item_id is None
    addon.getSetting.assert_not_called()
    xbmc_window.assert_not_called()
