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

Содержит тесты для проверки функционала
входа и выхода из системы.
"""

# import pytest
from playwright.sync_api import Page
from pages.main_page import MainPage
from pages.login_page import LoginPage

# @pytest.mark.smoke
class TestLogin:
    """Класс тестов для проверки авторизации.

    Тесты покрывают следующие сценарии:
    1. test_successful_login: Проверяет успешный вход в систему
    2. test_unsuccessful_login: Проверяет вход с неверными учетными данными
    3. test_successful_login_and_logout: Проверяет успешный вход и выход из системы
    4. test_password_visibility: Проверяет видимость символов пароля
    """

    # @pytest.mark.develop
    def test_successful_login(self, browser: Page) -> None:
        """Проверяет успешный вход в систему.

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

        lp = LoginPage(browser)
        lp.do_login()

    def test_unsuccessful_login(self, browser: Page) -> None:
        """Проверяет вход с неверными учетными данными.

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

        lp = LoginPage(browser)
        lp.do_unsuccessful_login()

    # @pytest.mark.develop
    def test_successful_login_and_logout(self, browser: Page) -> None:
        """Проверяет успешный вход и выход из системы.

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

        lp = LoginPage(browser)
        lp.do_login()

        mp = MainPage(browser)
        mp.do_logout()

    def test_password_visibility(self, browser: Page) -> None:
        """Проверяет видимость символов пароля.

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

        lp = LoginPage(browser)
        lp.open("")

        is_hidden_icon = lp.is_password_icon_hidden()

        if is_hidden_icon:
            is_hidden = lp.is_password_hidden()
            assert is_hidden, "Password should be hidden"

            # Нажатие на иконку скрытия пароля, пароль видим
            lp.click_password_hidden_icon()
            is_hidden_icon = lp.is_password_icon_hidden()
            is_hidden = lp.is_password_hidden()

            assert not is_hidden_icon, "Password hidden icon should not be in hidden state"
            assert not is_hidden, "Password should be visible"
        else:
            is_hidden = lp.is_password_hidden()
            assert not is_hidden, "Password should be visible"

            # Нажатие на иконку скрытия пароля, пароль скрыт
            lp.click_password_hidden_icon()
            is_hidden_icon = lp.is_password_icon_hidden()
            is_hidden = lp.is_password_hidden()

            assert is_hidden_icon, "Password hidden icon should be in hidden state"
            assert is_hidden, "Password should be hidden"
