"""Модуль тестов для проверки операций с компонентом панели выбора значения.

Содержит тесты для для проверки операций с компонентом панели выбора значения.
"""

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


# @pytest.mark.smoke
class TestSelectionBarComponent:
    """Класс тестов для проверки операций с компонентом панели выбора значения на примере
    панели выбора значения 'Тип' в боковой панели фильтрации вкладки 'Системный журнал'
    панели событий.

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

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

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

        lp = LoginPage(browser)
        lp.do_login()

        mp = MainPage(browser)
        mp.should_be_event_panel()

        system_log_events_container = mp.click_events_panel_system_log_tab()
        sidebar_filter = system_log_events_container.click_filter_button()
        browser.wait_for_timeout(500)

        sidebar_filter.add_filtering_parameter("filter_type", "Тип")
        filter_type_bar = sidebar_filter.get_filtering_parameter("filter_type")
        filter_type_title = filter_type_bar.get_selection_bar_title()
        assert filter_type_title == "Тип", "Filtering parameter bar 'Тип' is missing"

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

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

        lp = LoginPage(browser)
        lp.do_login()

        mp = MainPage(browser)
        mp.should_be_event_panel()

        system_log_events_container = mp.click_events_panel_system_log_tab()
        sidebar_filter = system_log_events_container.click_filter_button()
        browser.wait_for_timeout(500)

        sidebar_filter.add_filtering_parameter("filter_type", "Тип")
        filter_type_bar = sidebar_filter.get_filtering_parameter("filter_type")

        filter_type_bar.open_values_list()
        filter_type_bar.select_value("e-nms")
        selected_values = filter_type_bar.get_selected_values()
        assert len(selected_values) > 0, "No values has been selected"
        assert selected_values[0] == "e-nms", f"Got unexpected selected value {selected_values[0]}"

        filter_type_bar.open_values_list()
        filter_type_bar.select_value("Технический учет")
        selected_values = filter_type_bar.get_selected_values()
        assert len(selected_values) > 0, "No values has been selected"
        assert selected_values[0] == "e-nms", f"Got unexpected selected value {selected_values[0]}"
        assert selected_values[1] == "Технический учет", f"Got unexpected selected value {selected_values[1]}"

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

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

        lp = LoginPage(browser)
        lp.do_login()

        mp = MainPage(browser)
        mp.should_be_event_panel()

        system_log_events_container = mp.click_events_panel_system_log_tab()
        sidebar_filter = system_log_events_container.click_filter_button()
        browser.wait_for_timeout(500)

        sidebar_filter.add_filtering_parameter("filter_type", "Тип")
        filter_type_bar = sidebar_filter.get_filtering_parameter("filter_type")
        filter_type_bar.open_values_list()
        filter_type_bar.select_value("e-nms")
        browser.wait_for_timeout(300)

        filter_type_bar.clear_selections()
        selected_values = filter_type_bar.get_selected_values()
        assert len(selected_values) == 0, "Selected values should be deleted"
