"""Модуль тестов панели событий.

Содержит тесты для проверки функциональности
панели событий в приложении.
"""

# import pytest
from playwright.sync_api import Page
from pages.main_page import MainPage
from pages.login_page import LoginPage


# @pytest.mark.smoke
class TestEventPanel:
    """Класс тестов для проверки панели событий.

    Тесты покрывают следующие сценарии:
    1. test_event_panel_content: Проверяет содержимое панели событий
    2. test_event_panel_expand_buttons: Проверяет состояние и количество кнопок расширения рабочей области панели событий

    Атрибуты:
        browser: Фикстура для работы с браузером.
    """

    # @pytest.mark.develop
    def test_event_panel_content(self, browser: Page) -> None:
        """Проверяет содержимое панели событий.

        Args:
            browser: Экземпляр страницы Playwright.
        """

        lp = LoginPage(browser)
        lp.do_login()

        mp = MainPage(browser)
        mp.should_be_event_panel()

        # Проверяем соответствие тултипов информации на кнопках
        tooltip_event_counters = mp.get_event_counters_by_tooltips()
        button_event_counters = mp.get_event_counters_by_tooltips()

        for event, counter in tooltip_event_counters.items():
            button_counter = button_event_counters.get(event)
            if button_counter is None:
                assert False, f"Found unexpected tooltip {event} for event button"

            if button_counter != counter:
                assert False, f"Expected tooltip value {counter} is not equal button value {button_counter} for event button {event}"

    def test_event_panel_expand_buttons(self, browser: Page) -> None:
        """Проверяет состояние и количество кнопок расширения рабочей области панели событий.

        Args:
            browser: Экземпляр страницы Playwright.
        """

        lp = LoginPage(browser)
        lp.do_login()

        mp = MainPage(browser)

        # Проверяем начальное состояние - панель событий внизу, видна одна кнопка expand less
        current_position = mp.get_events_panel_position()
        assert current_position == "bottom", \
               "Events panel should be located on main page bottom"
        assert mp.check_expand_less_button(), \
               "Expand less button should be present"
        assert mp.check_expand_more_button(), \
               "Expand more button should be absent"

        mp.click_events_panel_expand_less_button()
        mp.wait_for_timeout(500)

        # Проверяем, что панель событий переместилась в середину экрана,
        # видна обе кнопки expand less и expand more
        current_position = mp.get_events_panel_position()
        assert current_position == "center", \
               "Events panel should be located on main page center"
        assert mp.check_expand_less_button(), \
               "Expand less button should be present"
        assert mp.check_expand_more_button(), \
               "Expand more button should be present"

        mp.click_events_panel_expand_less_button()
        mp.wait_for_timeout(500)

        # Проверяем, что панель событий находится вверху экрана,
        # видна кнопки expand more и отсутствует expand less
        current_position = mp.get_events_panel_position()
        assert current_position == "top", \
               "Events panel should be located on main page top"
        assert mp.check_expand_less_button(), \
               "Expand less button should be absent"
        assert mp.check_expand_more_button(), \
               "Expand more button should be present"

        # перемещение в отратном напрвлении сверху вниз
        mp.click_events_panel_expand_more_button()
        mp.wait_for_timeout(500)

        current_position = mp.get_events_panel_position()
        assert current_position == "center", \
               "Events panel should be located on main page center"
        assert mp.check_expand_less_button(), \
               "Expand less button should be present"
        assert mp.check_expand_more_button(), \
               "Expand more button should be present"

        mp.click_events_panel_expand_more_button()
        mp.wait_for_timeout(500)

        current_position = mp.get_events_panel_position()
        assert current_position == "bottom", \
               "Events panel should be located on main page bottom"
        assert mp.check_expand_less_button(), \
               "Expand less button should be present"
        assert mp.check_expand_more_button(), \
               "Expand more button should be absent"
