"""Модуль тестов вкладки 'Лицензии'.

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

import uuid
from typing import List
import pytest
from playwright.sync_api import Page
from pages.main_page import MainPage
from pages.login_page import LoginPage
from pages.license_tab import LicenseTab

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

    Тесты покрывают следующие сценарии:
    1. test_lisence_tab_content: Проверяет содержимое вкладки 'Лицензии'
    2. test_license_tab_input_form_and_check_alert: Проверяет форму ввода лицензии и отображение алертов
    """

    @pytest.fixture(scope="function", autouse=True)
    def setup(self, browser: Page) -> None:
        """Настраивает тестовое окружение перед каждым тестом.

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

        lp = LoginPage(browser)
        lp.do_login()

        mp = MainPage(browser)
        mp.should_be_navigation_panel()
        mp.click_main_navigation_panel_item("Настройки")
        mp.click_subpanel_item("Лицензии")

    # @pytest.mark.develop
    def test_lisence_tab_content(self, browser: Page) -> None:
        """Проверяет содержимое вкладки 'Лицензии'.

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

        lt = LicenseTab(browser)
        lt.check_content()

    def test_license_tab_input_form_and_check_alert(self, browser: Page) -> None:
        """Проверяет форму ввода лицензии и отображение алертов.

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

        def gen_test_data() -> List[str]:
            """Генерирует тестовые данные для проверки формы.

            Returns:
                List[str]: Список тестовых строк лицензий.
            """

            data = []
            for i in range(3):
                data.append(uuid.uuid4().hex)

            lowercase_str = uuid.uuid4().hex
            data.append(lowercase_str.upper())
            data.append(lowercase_str + "fffffffff")
            data.append("0")
            data.append("000000000000000000000000000000000000000000000000")
            data.append("-1")

            return data

        lt = LicenseTab(browser)
        lt.should_be_empty_input_form()

        lt.fill_license_input_form("")
        lt.should_be_error_alert_window_with_text("Неверный лицензионный ключ")

        data = gen_test_data()

        for data_string in data:
            lt.fill_license_input_form(data_string)
            lt.should_be_error_alert_window_with_text("Ошибка обновления лицензии")
