"""Модуль страницы локации."""

from playwright.sync_api import Page
from components.toolbar_component import ToolbarComponent
from pages.base_page import BasePage


class LocationPage(BasePage):
    """Класс для работы со страницей локации."""

    # Константы локаторов
    TOOLBAR_BUTTONS_LOCATOR = (
        "//div[contains(@class, 'layout class--')]"
        "//span[@class='v-tooltip v-tooltip--bottom']//button"
    )

    # Индексы кнопок
    CREATE_BUTTON_INDEX = 0  # Первая кнопка
    EDIT_BUTTON_INDEX = 1    # Вторая кнопка

    def __init__(self, page: Page) -> None:
        """
        Инициализирует страницу локации.

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

        # Инициализация тулбара
        self.toolbar = ToolbarComponent(page, "")

        # Кнопка "Создать" - первая кнопка
        create_button_locator = self.page.locator(
            self.TOOLBAR_BUTTONS_LOCATOR
        ).nth(self.CREATE_BUTTON_INDEX)

        # Кнопка "Изменить" - вторая кнопка
        edit_button_locator = self.page.locator(
            self.TOOLBAR_BUTTONS_LOCATOR
        ).nth(self.EDIT_BUTTON_INDEX)

        # Инициализация кнопок
        self.toolbar.add_tooltip_button(create_button_locator, "create")
        self.toolbar.add_tooltip_button(edit_button_locator, "edit")

        self._create_child_frame = None

    # Действия
    def click_create_button(self) -> None:
        """
        Кликает на кнопку 'Создать'.

        Returns:
            None
        """
        # Используем метод тулбара для клика
        self.toolbar.click_button("create")
        self.wait_for_timeout(3000)

    def click_edit_button(self) -> None:
        """
        Кликает на кнопку 'Изменить'.

        Returns:
            None
        """
        self.toolbar.click_button("edit")
        self.wait_for_timeout(2000)

    def wait_for_timeout(self, timeout: int) -> None:
        """
        Ожидает указанное количество миллисекунд.

        Args:
            timeout: Время ожидания в миллисекундах
        """
        self.page.wait_for_timeout(timeout)

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

        Raises:
            AssertionError: Если кнопки недоступны или подсказки неверны.
        """
        # Проверяем кнопку "Создать"
        self.toolbar.check_button_visibility("create")
        self.toolbar.check_button_tooltip("create", "Создать")

        # Проверяем кнопку "Изменить"
        self.toolbar.check_button_visibility("edit")
        self.toolbar.check_button_tooltip("edit", "Изменить")

        self.wait_for_timeout(2000)
