"""Модуль dropdown_list_element содержит класс для работы с выпадающими списками.

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

from tools.logger import get_logger
from elements.base_element import BaseElement

logger = get_logger("DROPDOWN_LIST")

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

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

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

        Returns:
            str: Тип элемента - 'выпадающий список'.
        """

        return "dropdown list"

    # Действия:
    def click_item_with_text(self, text: str) -> None:
        """Выбирает элемент списка по указанному тексту.

        Args:
            text (str): Текст элемента для выбора.
        """

        logger.info(f'Selecting item with text "{text}" from dropdown "{self.name}"')
        self.page.get_by_role("listitem").filter(has_text=text).click()

    # Проверки:
    def check_item_with_text(self, text: str) -> None:
        """Проверяет наличие и доступность элемента списка.

        Args:
            text (str): Текст элемента для проверки.

        Raises:
            AssertionError: Если элемент отсутствует или недоступен.
        """

        logger.info(f'Checking item with text "{text}" in dropdown "{self.name}"')
        enabled = self.page.get_by_role("listitem").filter(has_text=text).is_enabled()
        if not enabled:
            assert False, f"Dropdown list item '{text}' is missing or disabled"
