# Исходный код components.eventbar_component

    """Модуль компонента панели событий. Содержит класс для работы с элементами панели."""

    from playwright.sync_api import Page
    from tools.logger import get_logger
    from locators.event_panel_locators import EventPanelLocators
    from elements.tooltip_button_element import TooltipButton
    from elements.tab_button_element import TabButton
    from elements.button_element import Button
    from components_derived.container_system_log_events import SystemLogEventsContainer
    from components_derived.user_card import UserCard
    from components.base_component import BaseComponent

    logger = get_logger("EVENT_PANEL")

    class EventPanelComponent(BaseComponent):
        """Компонент панели событий. Предоставляет методы для взаимодействия с ней."""

        def __init__(self, page: Page):
            """Инициализирует компонент панели событий.

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

            super().__init__(page)

            self.states_tab = TabButton(page, self.page.locator(EventPanelLocators.TAB_STATES), "states_tab")
            self.actions_tab = TabButton(page, self.page.locator(EventPanelLocators.TAB_ACTIONS), "actions_tab")
            self.events_tab = TabButton(page, self.page.locator(EventPanelLocators.TAB_EVENTS), "events_tab")
            self.maintenance_tab = TabButton(page, self.page.locator(EventPanelLocators.TAB_MAINTENANCE), "maintenance_tab")
            self.system_log_tab = TabButton(page, self.page.locator(EventPanelLocators.TAB_SYSTEM_LOG), "system_log_tab")

            self.unknown_reason_button = TooltipButton(page, self.page.locator(EventPanelLocators.BUTTONS_EVENT).nth(0), "unknown_reason_button")
            self.warning_button = TooltipButton(page, self.page.locator(EventPanelLocators.BUTTONS_EVENT).nth(1), "warning_button")
            self.damage_button = TooltipButton(page, self.page.locator(EventPanelLocators.BUTTONS_EVENT).nth(2), "damage_button")
            self.failure_button = TooltipButton(page, self.page.locator(EventPanelLocators.BUTTONS_EVENT).nth(3), "failure_button")

            buttons_service_locators = self.page.locator(EventPanelLocators.BUTTONS_SERVICE).get_by_role("button").all()
            self.search_button = Button(page, buttons_service_locators[0], "search_button")
            self.user_button = Button(page, buttons_service_locators[1], "user_button")

        # Действия:

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

            button_locator = self.page.locator(EventPanelLocators.TAB_EXPAND_BUTTONS).\
                             get_by_role("button").filter(has_text='expand_less')
            button_locator.click()

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

            button_locator = self.page.locator(EventPanelLocators.TAB_EXPAND_BUTTONS).\
                             get_by_role("button").filter(has_text='expand_more')
            button_locator.click()

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

            self.system_log_tab.check_visibility("System log tab button is missing on event panel")
            self.system_log_tab.click()

            system_log_events = SystemLogEventsContainer(self.page, EventPanelLocators.CONTAINER_SYSTEM_LOG_EVENTS)
            return system_log_events

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

            self.should_be_user_button()
            self.user_button.click()

            user_card = UserCard(self.page)
            return user_card

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

            user_card = self.click_user_button()
            user_card.click_logout_button()

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

            tooltip_texts = []

            tooltip_texts.append(self.unknown_reason_button.get_tooltip_text())
            tooltip_texts.append(self.warning_button.get_tooltip_text())
            tooltip_texts.append(self.damage_button.get_tooltip_text())
            tooltip_texts.append(self.failure_button.get_tooltip_text())

            return tooltip_texts

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

            event_buttons_texts = {}

            event_buttons_texts['Неизвестно'] = self.unknown_reason_button.get_text(0)
            event_buttons_texts['Предупреждение'] = self.warning_button.get_text(0)
            event_buttons_texts['Повреждение'] = self.damage_button.get_text(0)
            event_buttons_texts['Авария'] = self.failure_button.get_text(0)

            return event_buttons_texts

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

            style_attr = self.page.locator(EventPanelLocators.AREA_EVENTS).get_attribute("style")
            position = "bottom"

            if style_attr.find("display: none;") == -1:
                height = style_attr.replace("height: ","").replace(";", "")
                if height == "100%":
                    position = "top"
                else:
                    position = "center"

            return position

        # Проверки:

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

            try:
                _ = self.page.locator(EventPanelLocators.TAB_EXPAND_BUTTONS).\
                              get_by_role("button").filter(has_text='expand_less')
            except TimeoutError:
                return False
            return True

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

            try:
                _ = self.page.locator(EventPanelLocators.TAB_EXPAND_BUTTONS).\
                              get_by_role("button").filter(has_text='expand_more')
            except TimeoutError:
                return False
            return True

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

            self.user_button.check_visibility("User button is missing on event panel")

        def should_be_search_button(self) -> None:
            """Проверяет наличие кнопки поиска."""

            self.search_button.check_visibility("Search button is missing on event panel")

        def should_be_tab_buttons(self) -> None:
            """Проверяет наличие блока tab-кнопок Состояния, Действия, События, Обслуживание, Системный журнал."""

            self.states_tab.check_have_text('Состояния', "Tab button with text Состояния is missing on event panel")
            self.actions_tab.check_have_text('Действия',"Tab button with text Действия is missing on event panel")
            self.events_tab.check_have_text('События', "Tab button with text События is missing on event panel")
            self.maintenance_tab.check_have_text('Обслуживание', "Tab button with text Обслуживание is missing on event panel")
            self.system_log_tab.check_have_text('Системный журнал', "Tab button with text Системный журнал is missing on event panel")

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

            self.unknown_reason_button.check_visibility("Unknown reason event button is missing on event panel")
            self.warning_button.check_visibility("Warning event button is missing on event panel")
            self.damage_button.check_visibility("Damage event button is missing on event panel")
            self.failure_button.check_visibility("Failure event button is missing on event panel")