# Исходный код pages.main_page

    """Модуль главной страницы приложения.

    Содержит класс MainPage для работы с элементами главной страницы.
    Включает взаимодействие с панелью навигации, кнопками и карточкой пользователя.
    """

    from playwright.sync_api import Page
    from locators.navigation_panel_locators import NavigationPanelLocators
    from components_derived.container_system_log_events import SystemLogEventsContainer
    from components_derived.user_card import UserCard
    from components.eventbar_component import EventPanelComponent
    from components.navbar_component import NavigationPanelComponent
    from pages.base_page import BasePage

    class MainPage(BasePage):
        """Класс для работы с главной страницей приложения.

        Атрибуты:
            page: Экземпляр страницы Playwright.
            navigation_panel: Компонент панели навигации.
            user_button: Кнопка пользователя.
            user_card: Карточка пользователя.
        """

        def __init__(self, page: Page) -> None:
            """Инициализирует элементы главной страницы.

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

            super().__init__(page)

            self.navigation_panel = NavigationPanelComponent(page)
            self.event_panel = EventPanelComponent(page)

        # Действия:

        def click_events_panel_expand_less_button(self) -> None:
            """Выполняет нажатие кнопки галочка вверх."""

            self.event_panel.click_expand_less_button()

        def click_events_panel_expand_more_button(self) -> None:
            """Выполняет нажатие кнопки галочка вниз."""

            self.event_panel.click_expand_more_button()

        def click_events_panel_system_log_tab(self) -> SystemLogEventsContainer:
            """Выполняет нажатие tab-кнопки Системный журнал."""

            return self.event_panel.click_system_log_tab()

        def click_subpanel_item(self, item_name: str, parent=None) -> None:
            """Выполняет рекурсивный поиск по панели навигации
            заданного элемента и делает клик по нему."""

            active_item_locator = self.page.locator(
                NavigationPanelLocators.PANEL_MAIN
            ).locator(NavigationPanelLocators.ACTIVE_CONTAINER)
            node_locator = active_item_locator.locator(
                NavigationPanelLocators.SUB_PANEL_MAIN
            ).locator(NavigationPanelLocators.TREEVIEW).first

            # Рекурсивный поиск в дереве v-treeview заданного элемента
            # и клик по нему
            self.navigation_panel.click_sub_item(
                node_locator, item_name, parent
            )

        def click_user_button(self) -> UserCard:
            """Выполняет нажатие кнопки пользователя."""

            return self.event_panel.click_user_button()

        def do_logout(self) -> None:
            """Выполняет выход из системы."""

            self.event_panel.do_logout()

        def get_event_counters_by_buttons(self) -> dict:
            """Возвращает набор значений кнопок счетчиков событий."""

            return self.event_panel.get_event_button_values()

        def get_event_counters_by_tooltips(self) -> dict:
            """Возвращает набор текстов всплывающих подсказок
            кнопок счетчиков событий."""

            events = self.event_panel.get_event_tooltip_texts()

            event_counters = {}

            for event in events:
                if len(event) > 0:
                    event_name, count = event.split(" ")
                    event_counters[event_name] = count
            return event_counters

        def get_events_panel_position(self) -> str:
            """Возвращает текущее положение панели событий
            относительно страницы: "top", "center","bottom"."""

            return self.event_panel.get_panel_position()

        # Проверки:

        def check_expand_less_button(self) -> bool:
            """Проверяет наличие кнопки галочка вверх."""

            return self.event_panel.check_expand_less_button()

        def check_expand_more_button(self) -> bool:
            """Проверяет наличие кнопки галочка вниз."""

            return self.event_panel.check_expand_more_button()

        def should_be_event_panel(self) -> None:
            """Проверяет наличие элементов панели событий."""

            ## to-do: кнопки галочки???
            self.event_panel.should_be_tab_buttons()
            self.event_panel.should_be_event_buttons()
            self.event_panel.should_be_search_button()
            self.event_panel.should_be_user_button()