"""Модуль вкладки 'Статус обслуживания'.

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

from playwright.sync_api import Page
from locators.table_locators import TableLocators
from components.toolbar_component import ToolbarComponent
from components.table_component import TableComponent
from pages.base_page import BasePage


class ServiceStatusTab(BasePage):
    """Класс для работы с вкладкой 'Статус обслуживания'.

    Предоставляет методы для взаимодействия с таблицей сервисов и проверки
    её состояния.

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

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

        super().__init__(page)

        self.toolbar = ToolbarComponent(page, "Статус обслуживания")
        self.services_table = TableComponent(page)

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

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

        Raises:
            AssertionError: Если таблица пуста.
        """

        return self.services_table.get_rows_count(TableLocators.TABLE_WORK_AREA)

    def scroll_services_table_up(self) -> None:
        """Прокручивает таблицу сервисов вверх."""

        self.services_table.scroll_up(TableLocators.TABLE_SCROLL_CONTAINER)

    def scroll_services_table_down(self) -> None:
        """Прокручивает таблицу сервисов вниз."""

        self.services_table.scroll_down(TableLocators.TABLE_SCROLL_CONTAINER)

    def check_services_table_content(self) -> None:
        """Проверяет содержимое таблицы сервисов.

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

        Raises:
            AssertionError: Если таблица пуста или заголовки неверны.
        """

        expected_headers = [
            'Контейнер',
            'Время создания',
            'Статус',
            'Время работы',
            'Image ID',
            'Image ТЭГ'
        ]

        self.services_table.check_content(TableLocators.TABLE_WORK_AREA, expected_headers)

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

        Returns:
            bool: True если прокрутка возможна, иначе False.
        """

        return self.services_table.is_scrollable_vertically(
            TableLocators.TABLE_SCROLL_CONTAINER
        )

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

        Raises:
            AssertionError: Если строка не видна.
        """

        self.services_table.check_first_row_visibility(TableLocators.TABLE_WORK_AREA)

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

        Raises:
            AssertionError: Если строка не видна.
        """

        self.services_table.check_last_row_visibility(TableLocators.TABLE_WORK_AREA)

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

        Args:
            row_index: Индекс проверяемой строки.

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

        self.services_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_services_table(self) -> None:
        """Проверяет наличие таблицы сервисов.

        Raises:
            AssertionError: Если таблица отсутствует.
        """

        self.services_table.check_visibility(
            TableLocators.TABLE_WORK_AREA,
            "Service statuses table is missing"
        )
