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

from playwright.sync_api import Page
from components.toolbar_component import ToolbarComponent
from components_derived.frames.create_child_element_frame import (
    CreateChildElementFrame
)
from pages.base_page import BasePage


# =============== Локаторы ================================================
PANEL_HEADER = "//span[text()='Объекты']/following-sibling::i"
CREATE_BUTTON_ANCESTOR_DIV3 = "xpath=/ancestor::div[3]//button"
# =========================================================================


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

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

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

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

        panel_header_locator = self.page.locator(PANEL_HEADER)

        # Кнопка "Создать" - первая кнопка в тулбаре
        create_button_locator = panel_header_locator.locator(
            CREATE_BUTTON_ANCESTOR_DIV3
        ).nth(0)

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

        # Инициализация фреймов (ленивая загрузка)
        self._create_child_frame = None

    def click_create_button(self) -> CreateChildElementFrame:
        """
        Кликает на кнопку 'Создать' и возвращает фрейм создания.

        Returns:
            CreateChildElementFrame: Фрейм создания дочернего элемента
        """

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

        self.wait_for_timeout(3000)

        # Создаем и возвращаем фрейм
        self._create_child_frame = CreateChildElementFrame(self.page)
        return self._create_child_frame

    def is_create_button_visible(self) -> bool:
        """
        Проверяет видимость кнопки 'Создать'.

        Returns:
            bool: True если кнопка видима
        """
        button = self.toolbar.get_button_by_name("create")

        if button is None:
            return False

        return button.is_present(timeout=5000) and button.locator.is_visible()

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

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