"""Модуль тестов панели навигации.

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

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


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

    Тесты покрывают следующие сценарии:
    - test_expand_panel: Проверяет полное раскрытие панели навигации
    - test_sub_panel_item_click: Проверяет возможность клика заданного элемента в подпанели навигации

    Атрибуты:
        browser: Фикстура для работы с браузером.
    """

    # @pytest.mark.develop
    def test_expand_panel(self, browser: Page):
        """Проверяет полное раскрытие панели навигации.

        Args:
            browser: Фикстура для работы с браузером.

        """

        # Действия:
        lp = LoginPage(browser)
        lp.do_login()

        # Мы на главной странице
        mp = MainPage(browser)

        # Проверки:
        # Проверяем наличие панели навигации
        mp.should_be_navigation_panel()

        # Открываем все пункты панели
        mp.click_main_navigation_panel_item("Настройки")

        mp.expand_navigation_subpanel()

        mp.click_main_navigation_panel_item("Объекты")
        mp.wait_for_timeout(300)

        mp.expand_navigation_subpanel()

    # @pytest.mark.develop
    def test_sub_panel_item_click(self, browser: Page):
        """Проверяет возможность клика заданного элемента в подпанели навигации.

        Args:
            browser: Фикстура для работы с браузером.

        """

        # Действия:
        lp = LoginPage(browser)
        lp.do_login()

        # Мы на главной странице
        mp = MainPage(browser)

        # Проверки:
        # Проверяем наличие панели навигации
        mp.should_be_navigation_panel()

        # Открываем разные пункты панели
        mp.click_main_navigation_panel_item("Настройки")

        mp.click_subpanel_item("Обслуживание и диагностика")
        mp.click_subpanel_item("Статус обслуживания")
        mp.wait_for_timeout(2000)

        mp.click_subpanel_item("Сеансы")
        mp.click_subpanel_item("Настройки", parent="Сеансы")

        # Открываем/закрываем пункт панели
        mp.click_subpanel_item("Пользователи")
        mp.click_subpanel_item("Пользователи")
        mp.wait_for_timeout(2000)

        # Открываем пункты панели с одинаковыми имнами, но разным расположением
        mp.click_subpanel_item("Шаблоны")
        mp.wait_for_timeout(2000)

        mp.click_subpanel_item("Zero Touch Provisioning")
        mp.click_subpanel_item("Шаблоны", parent="Zero Touch Provisioning")
        mp.wait_for_timeout(2000)

        # Переходим к Объектам
        mp.click_main_navigation_panel_item("Объекты")
        mp.wait_for_timeout(5000)


        mp.click_subpanel_item("test-zone")
        mp.wait_for_timeout(3000)

        # Переходим Здание ЦОД 4
        mp.click_subpanel_item("Здание ЦОД 4")
        mp.wait_for_timeout(3000)

        # Переходим к Стойка КСПД с указанием родителя
        mp.click_subpanel_item("Стойка КСПД", parent="Здание ЦОД 4")
        mp.wait_for_timeout(5000)

        # Переходим к Объектам
        mp.click_main_navigation_panel_item("Объекты")
        mp.click_main_navigation_panel_item("Объекты") # баг
        mp.wait_for_timeout(5000)

        mp.click_subpanel_item("Виртуальные устройства")
        mp.wait_for_timeout(3000)

        # Переходим к Стойка систем питания с указанием родителя
        mp.click_subpanel_item("Стойка систем питания", parent="Виртуальные устройства")
        mp.wait_for_timeout(5000)
