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

Класс ViewTaskModalWindow наследует базовый функционал ModalWindowComponent
и реализует методы просмотра модального окна отображения задачи.
"""

from playwright.sync_api import Page
from tools.logger import get_logger
from locators.modal_window_locators import ModalWindowLocators
from components.table_component import TableComponent
from components.modal_window_component import ModalWindowComponent

logger = get_logger("VIEW_TASK_MODAL_WINDOW")


class ViewTaskModalWindow(ModalWindowComponent):
    """Модальное окно отображения отображения задачи.

    Наследует ModalWindowComponent и добавляет функционал для:
    1. Инициализации модального окна
    2. Закрытия модального окна через тулбар
    3. Проверки содержимого модального окна
    """

    def __init__(self, page: Page):
        """Инициализирует элементы формы модального окна отображения задачи."""
        super().__init__(page)

        self.window_title_locator = page.locator(ModalWindowLocators.TASK_MODAL_WINDOW). \
                                    locator("//div[@class='v-toolbar__title']")

        # Настройка кнопки закрытия
        button_close_locator = page.locator(ModalWindowLocators.TASK_MODAL_WINDOW).get_by_role("button")
        self.add_toolbar_button(button_close_locator, "close")

        self.task_stages_table_locator = page.locator(ModalWindowLocators.TASK_MODAL_WINDOW). \
                                         locator("//div[@class='scrolltable']/div/table")
        self.task_stages_table = TableComponent(page)

    # Действия:
    def close(self):
        """Закрывает окно кнопкой на тулбаре."""

        self.click_toolbar_close_button()

    def get_stages_table_content(self) -> list[list[str]]:
        """Возвращает содержимое таблицы, включая заголовки.

        Returns:
            Двумерный список с содержимым таблицы.
        """

        return self.task_stages_table.read(self.task_stages_table_locator)

    def get_window_title(self) -> str:
        """Возвращает заголовок окна"""

        return self.toolbar.get_toolbar_title_text(self.window_title_locator)

    # Проверки:
    def check_content(self) -> None:
        """Проверяет наличие элементов окна.
        """

        self.toolbar.check_toolbar_presence_by_locator(self.page.locator(ModalWindowLocators.TASK_MODAL_WINDOW). \
                                    locator("//nav"), "Toolbar is missing")
        self.check_toolbar_button_visibility("close")
        self.check_toolbar_button_tooltip("close", "Закрыть")

        self.task_stages_table.check_visibility(self.task_stages_table_locator, "Task stages table is missing")

    def check_stages_table_headers(self, actual_headers, expected_headers) -> None:
        """ Проверка соответствия заголовка таблицы ожидаемому"""

        self.task_stages_table.check_table_headers(actual_headers, expected_headers)
