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

    """Модуль вкладки 'Конфигурация' в модуле Zero Touch Provisioning.

    Содержит класс ZTPConfigTab для работы с таблицей конфигурации ZTP.
    Позволяет проверять состояние и взаимодействовать с элементами вкладки.
    """

    from playwright.sync_api import Page
    from tools.logger import get_logger
    from locators.table_locators import TableLocators
    from elements.tooltip_button_element import TooltipButton
    from components.toolbar_component import ToolbarComponent
    from components.table_component import TableComponent
    from pages.base_page import BasePage

    logger = get_logger("ZTP_CONFIG_TAB")

    class ZTPConfigTab(BasePage):
        """Класс для работы с вкладкой 'Конфигурация' в модуле Zero Touch Provisioning.

        Предоставляет методы для взаимодействия с таблицей конфигурации ZTP
        и проверки состояния элементов интерфейса. Включает функциональность для:
        - Проверки содержимого и структуры таблицы конфигурации
        - Прокрутки таблицы и проверки видимости строк
        - Выделения строк таблицы
        - Работы с кнопкой синхронизации (Reload) в заголовке таблицы
        - Проверки видимости и подсказок кнопок синхронизации

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

        def __init__(self, page: Page) -> None:
            """Инициализирует компоненты вкладки 'Конфигурация'.

            Args:
                page: Экземпляр страницы Playwright для взаимодействия с браузером.
            """
            super().__init__(page)

            # Компонент тулбара вкладки конфигурации
            self.toolbar = ToolbarComponent(page, "Конфигурация")

            # Компонент таблицы конфигурации ZTP
            self.ztp_config_table = TableComponent(page)

        # Действия:

        def click_sync_button(self, index: int) -> None:
            """Нажимает кнопку 'Reload' в указанной ячейке заголовка таблицы.

            Перед кликом проверяет наличие кнопки.

            Args:
                index: Индекс ячейки в заголовке таблицы.

            Raises:
                AssertionError: Если индекс выходит за пределы или кнопка не найдена.
            """

            # Проверяем наличие кнопки перед кликом
            sync_button = self.ztp_config_table.get_header_cell_button(TableLocators.TABLE_WORK_AREA, index)
            assert sync_button.is_enabled(), f"Sync button is missing in {index} header cell"

            # Выполняем клик по кнопке
            sync_button.click()
            logger.info("Нажата кнопка синхронизации (Reload)")

        def get_rows_count(self) -> int:
            """Возвращает количество строк в таблице конфигурации (без заголовка).

            Returns:
                int: Количество строк с данными конфигурации ZTP.

            Raises:
                AssertionError: Если таблица пуста или не загружена.
            """
            return self.ztp_config_table.get_rows_count(TableLocators.TABLE_WORK_AREA)

        def scroll_config_table_up(self) -> None:
            """Прокручивает таблицу конфигурации вверх до начала."""
            self.ztp_config_table.scroll_up(TableLocators.TABLE_SCROLL_CONTAINER)

        def scroll_config_table_down(self) -> None:
            """Прокручивает таблицу конфигурации вниз до конца."""
            self.ztp_config_table.scroll_down(TableLocators.TABLE_SCROLL_CONTAINER)

        # Проверки:

        def check_config_table_content(self) -> None:
            """Проверяет содержимое таблицы конфигурации ZTP.

            Проверяет соответствие заголовков таблицы ожидаемым значениям
            и наличие данных в таблице.

            Raises:
                AssertionError: Если таблица пуста или заголовки не соответствуют ожидаемым.
            """
            # Ожидаемые заголовки столбцов таблицы конфигурации ZTP
            expected_headers = [
                'sync',
                'IDENTIFIER',
                'MAC',
                'DHCPRELAY',
                'ШАБЛОН',
                'IPSETTODEVICE',
                'СТАТУС',
                'ДЕЙСТВИЯ'
            ]

            self.ztp_config_table.check_content(
                TableLocators.TABLE_WORK_AREA,
                expected_headers,
                False
            )

        def check_sync_button_visibility(self, index: int) -> None:
            """Проверяет видимость кнопки синхронизации (Reload) в указанной ячейке заголовка.

            Args:
                index: Индекс ячейки в заголовке таблицы.

            Raises:
                AssertionError: Если кнопка не видна на странице.
            """
            sync_button = self.ztp_config_table.get_header_cell_button(TableLocators.TABLE_WORK_AREA, index)
            assert sync_button.is_enabled(), f"Sync button is missing in {index} header cell"

            # Прокручиваем к элементу для гарантии видимости
            sync_button.scroll_into_view_if_needed()

            # Проверяем видимость кнопки
            assert sync_button.is_visible(), f"Sync button in header cell {index} is not visible"

            logger.info("Кнопка синхронизации (Reload) видима")

        def check_sync_button_tooltip(self, index: int, expected_tooltip: str = "reload") -> None:
            """Проверяет текст подсказки кнопки синхронизации (Reload).

            Использует стандартный механизм проверки подсказок из ToolbarComponent.

            Args:
                index: Индекс ячейки в заголовке таблицы.
                expected_tooltip: Ожидаемый текст подсказки (по умолчанию 'reload').

            Raises:
                AssertionError: Если подсказка не соответствует ожидаемой или отсутствует.
            """
            # Убеждаемся, что кнопка существует
            sync_button = self.ztp_config_table.get_header_cell_button(TableLocators.TABLE_WORK_AREA, index)
            assert sync_button.is_enabled(), f"Sync button is missing in {index} header cell"

            sync_tooltip_button = TooltipButton(self.page, sync_button, "sync_button")

            # Проверка подсказки
            sync_tooltip_button.check_tooltip_with_text(expected_tooltip)

            logger.info(
                "Подсказка кнопки синхронизации (Reload) в ячейке %d: '%s'",
                index,
                expected_tooltip
            )

        def check_config_table_vertical_scrolling(self) -> bool:
            """Проверяет возможность вертикальной прокрутки таблицы конфигурации.

            Returns:
                bool: True если таблица поддерживает вертикальную прокрутку, иначе False.
            """
            return self.ztp_config_table.is_scrollable_vertically(
                TableLocators.TABLE_SCROLL_CONTAINER
            )

        def check_config_table_first_row_visibility(self) -> None:
            """Проверяет видимость первой строки таблицы конфигурации.

            Raises:
                AssertionError: Если первая строка таблицы не видна.
            """
            self.ztp_config_table.check_first_row_visibility(TableLocators.TABLE_WORK_AREA)

        def check_config_table_last_row_visibility(self) -> None:
            """Проверяет видимость последней строки таблицы конфигурации.

            Raises:
                AssertionError: Если последняя строка таблицы не видна.
            """
            self.ztp_config_table.check_last_row_visibility(TableLocators.TABLE_WORK_AREA)

        def check_config_table_row_highlighting(self, row_index: int) -> None:
            """Проверяет выделение указанной строки таблицы конфигурации.

            Args:
                row_index: Индекс проверяемой строки (0-based, без учета заголовка).

            Raises:
                AssertionError: Если строка не выделена после взаимодействия.
            """
            self.ztp_config_table.check_row_highlighting(
                TableLocators.TABLE_WORK_AREA, row_index
            )

        def should_be_toolbar(self) -> None:
            """Проверяет наличие и видимость тулбара на вкладке конфигурации.

            Raises:
                AssertionError: Если тулбар отсутствует на странице.
            """
            self.toolbar.check_toolbar_presence("Toolbar is missing")

        def should_be_config_table(self) -> None:
            """Проверяет наличие и видимость таблицы конфигурации ZTP.

            Raises:
                AssertionError: Если таблица конфигурации отсутствует на странице.
            """
            self.ztp_config_table.check_visibility(
                TableLocators.TABLE_WORK_AREA, "Configuration table is missing"
            )