# Исходный код pages.login_page

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

    Содержит класс LoginPage для работы с элементами страницы входа в систему.
    Использует Playwright для взаимодействия с UI и обработки ответов сервера.
    """

    from playwright.sync_api import Page
    from locators.text_input_locators import TextInputLocators
    from elements.text_input_element import TextInput
    from elements.icon_element import Icon
    from elements.button_element import Button
    from data.environment import host
    from data.constants import Constants
    from components.alert_component import AlertComponent
    from pages.base_page import BasePage

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

        Атрибуты:
            page: Экземпляр страницы Playwright.
            login_input: Поле ввода логина.
            password_input: Поле ввода пароля.
            login_button: Кнопка входа.
            alert: Алерт окно с сообщением об ошибке.
        """

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

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

            super().__init__(page)

            self.login_input = TextInput(page, page.get_by_label("Имя пользователя"), "login input")
            self.password_input = TextInput(page, page.get_by_label("Пароль"), "password input")

            icon_locator = page.get_by_label("Пароль").locator("xpath=../..").locator(TextInputLocators.ICON_PASSWORD_HIDING)
            self.password_hidden_icon = Icon(page,
                                             icon_locator,
                                             "password hidden icon")
            self.login_button = Button(page, page.get_by_role("button"), "login button")

            self.alert = AlertComponent(page)

        # Действия:

        def click_password_hidden_icon(self) -> None:
            """Нажатие на иконку скрытия пароля."""

            self.password_hidden_icon.click()

        def do_login(self, username: str = None, password: str = None) -> None:
            """Выполняет вход в систему.

            Использует переданные учетные данные или значения из Constants.
            Обрабатывает ответ сервера для получения токена доступа.

            Args:
                username: Логин пользователя. По умолчанию из Constants.
                password: Пароль пользователя. По умолчанию из Constants.

            Raises:
                AssertionError: Если после входа открылась неожиданная страница.
            """

            def handle_response(response):
                if "login" in response.url:
                    response_body = self.get_response_body(response)
                    if response_body:
                        host.set_current_user_credential(response_body)

            self.page.on("response", handle_response)

            self.open("")

            # Используем переданные значения или значения по умолчанию из Constants
            actual_username = username if username is not None else Constants.login
            actual_password = password if password is not None else Constants.password

            self.login_input.clear()
            self.login_input.input_value(actual_username)

            self.password_input.clear()
            self.password_input.input_value(actual_password)

            self.login_button.click()

            self.check_URL("dashboard", "An unexpected page has been opened")

        def do_unsuccessful_login(self, username: str = "someuser", password: str = "password") -> None:
            """Выполняет попытку входа с неверными учетными данными.

            Проверяет наличие сообщения об ошибке. Можно передать свои данные
            или использовать значения по умолчанию.

            Args:
                username: Неверный логин. По умолчанию "someuser".
                password: Неверный пароль. По умолчанию "password".
            """

            self.open("")

            self.login_input.clear()
            self.login_input.input_value(username)

            self.password_input.clear()
            self.password_input.input_value(password)

            self.login_button.click()

            alert_type = self.alert.get_alert_type()
            assert alert_type=="error", f"Expected error alert, but got {alert_type} alert"

            self.alert.check_alert_presence("Неверная пара логин/пароль")
            self.alert.check_alert_absence("Неверная пара логин/пароль")

        # Проверки:

        def is_password_icon_hidden(self) -> bool:
            """Проверяет состояние иконки скрытия символов пароля.
               Возвращает True если пароль будет скрыт, иначе False
            """

            return self.password_hidden_icon.is_password_hidden()

        def is_password_hidden(self) -> bool:
            """Проверяет видимость символов пароля."""

            input_type = self.password_input.get_input_type()
            if input_type == "password":
                return True
            elif input_type == "text":
                return False
            else:
                assert False, "Check password hidden error"