"""Модуль тестов вкладки 'Стойка' в модуле Объекты.

Содержит тесты для проверки функциональности
работы со стойкой оборудования.
"""
import pytest
from playwright.sync_api import Page
from pages.rack_pages.rack_tab import RackTab
from pages.login_page import LoginPage
from pages.main_page import MainPage


# @pytest.mark.smoke
class TestRackTab:
    """Набор тестов для вкладки 'Стойка' в модуле Объекты.

    Проверяет корректность отображения, функциональность элементов интерфейса
    и переключение между вкладками стойки оборудования.

    Тесты покрывают следующие функциональные области:
    1. test_rack_tab_content - Базовая структура и содержимое вкладки стойки
    2. test_rack_tab_switching - Функциональность переключения между вкладками стойки
    """

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

        Выполняет:
        1. Авторизацию в системе
        2. Переход к стойке оборудования через панель навигации:
           - Объекты → Физические устройства с опросом → Здание ЦОД 4 → Стойка КСПД

        Args:
            browser (Page): Экземпляр страницы Playwright для взаимодействия с UI
        """
        # Авторизация в системе
        lp = LoginPage(browser)
        lp.do_login()

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

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

        mp.click_subpanel_item("Физические устройства с опросом")
        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(10000)

    @pytest.mark.develop
    def test_rack_tab_content(self, browser: Page) -> None:
        """Тест содержимого вкладки 'Стойка'.

        Проверяет:
        1. Наличие и корректность заголовка панели с навигационной цепочкой
        2. Отображение и структуру обеих сторон стойки (лицевой и обратной)
        3. Наличие и функциональность кнопок панели инструментов
        4. Корректность отображения юнитов и устройств на стойке

        Args:
            browser (Page): Экземпляр страницы Playwright для взаимодействия с UI
        """
        expected_toolbar_subtitles = [
            "Мониторинг и инвентаризация",
            'chevron_right',
            "Физические устройства с опросом",
            'chevron_right',
            "Здание ЦОД 4",
            'chevron_right',
            "Стойка КСПД"
        ]

        rt = RackTab(browser)
        rt.should_be_header_panel(expected_toolbar_subtitles)

        # Комплексная проверка отображения обеих сторон стойки с детальной информацией
        rt.should_be_rack_sides_displayed()

        # Переход в режим редактирования
        rt.should_be_toolbar_buttons()
        rt.wait_for_timeout(2000)

    def test_rack_tab_switching(self, browser: Page) -> None:
        """Тест переключения между вкладками стойки оборудования.

        Проверяет функциональность переключения на все доступные вкладки:
        1. Общая информация
        2. Обслуживание
        3. События
        4. Сервисы

        Проверяет:
        1. Наличие и доступность всех вкладок
        2. Корректность активации вкладок после переключения
        3. Отсутствие ошибок при последовательном переключении

        Args:
            browser (Page): Экземпляр страницы Playwright для взаимодействия с UI
        """
        rt = RackTab(browser)

        # Проверяем переключение между всеми вкладками стойки
        rt.check_tab_switching()
