"""Модуль tooltip_button_element содержит класс для работы с кнопками с подсказками.

Класс TooltipButton наследует базовый функционал BaseElement и добавляет
методы для проверки всплывающих подсказок у кнопок.
"""

from tools.logger import get_logger
from locators.button_locators import ButtonLocators
from elements.base_element import BaseElement

logger = get_logger("TOOLTIP_BUTTON")

class TooltipButton(BaseElement):
    """Класс для работы с кнопками, имеющими всплывающие подсказки.

    Наследует функциональность BaseElement и добавляет методы
    для взаимодействия с подсказками кнопок.
    """

    @property
    def type_of(self) -> str:
        """Возвращает тип элемента ('tooltip_button').

        Returns:
            str: Тип элемента - кнопка с подсказкой.
        """

        return "tooltip_button"

    # Действия:
    def get_tooltip_text(self) -> str:
        """Возвращает текст всплывающей подсказки.

        Returns:
            str: Текст всплывающей подсказки.

        """

        # Наведение на элемент для отображения подсказки
        self.locator.hover()

        # Получение элемента подсказки
        tooltip = self.page.locator(ButtonLocators.TOOLTIP)

        tooltip.wait_for(state="visible", timeout=5000)

        self.page.wait_for_timeout(300)
        return tooltip.text_content().strip()

    def wait_for_tooltip_to_disappear(self, timeout: int = 5000) -> None:
        """Ожидает исчезновения всех активных всплывающих подсказок."""

        self.page.mouse.click(10, 10)
        tooltip_locator = self.page.locator(".v-tooltip__content.menuable__content__active")

        tooltip_locator.wait_for(state="hidden", timeout=timeout)

    # Проверки:
    def check_tooltip_with_text(self, expected_text: str) -> None:
        """Проверяет соответствие текста всплывающей подсказки.

        Args:
           expected_text (str): Ожидаемый текст подсказки.

        Raises:
            AssertionError: Если текст подсказки не соответствует ожидаемому.
        """

        # Наведение на элемент для отображения подсказки
        self.locator.hover()

        # Получение элемента подсказки
        tooltip = self.page.locator(ButtonLocators.TOOLTIP)

        tooltip.wait_for(state="visible", timeout=5000)

        self.page.wait_for_timeout(300)

        # Проверка соответствия текста
        actual_text = tooltip.text_content().strip()
        assert actual_text == expected_text, (
            f"Текст подсказки не соответствует ожидаемому. "
            f"Ожидалось: '{expected_text}', получено: '{actual_text}'"
        )
