# forms/rack_create_form.py
"""Модуль для работы с формой создания стойки."""

from dataclasses import dataclass
from typing import Dict
from playwright.sync_api import Page
from tools.logger import get_logger
from locators.rack_locators import RackLocators
from forms.base_rack_form import BaseRackForm, BaseRackData

logger = get_logger("CREATE_RACK_FORM")


@dataclass
class CreateRackData(BaseRackData):
    """Класс для хранения данных создаваемой стойки."""
    pass  # Используем все поля из базового класса


class CreateRackForm(BaseRackForm):
    """Компонент для работы с формой создания стойки."""

    # Маппинг текстовых полей
    TEXT_FIELDS_MAPPING = {
        "Имя": ("name", "name_input"),
        "Комментарий": ("comment", "comment_input"),
        "Серийный номер": ("serial", "serial_input"),
        "Инвентарный номер": ("inventory", "inventory_input"),
    }

    # Маппинг combobox полей
    COMBOBOX_FIELDS_MAPPING = {
        "Ввод кабеля": ("cable_entry", "cable_entry_input", "cable_entry_list"),
        "Состояние": ("state", "state_input", "state_list"),
        "Высота в юнитах": ("usize", "usize_input", "usize_list"),
        "Глубина (мм)": ("depth", "depth_input", "depth_list"),
        "Владелец": ("owner", "owner_input", "owner_list"),
        "Обслуживающая организация": ("service_org", "service_input", "service_list"),
        "Проект/Титул": ("project", "project_input", "project_list")
    }

    # Локаторы для текстовых полей
    TEXT_FIELDS_LOCATORS = {
        "Имя": RackLocators.CREATE_RACK_FORM_FIELD_NAME,
        "Комментарий": RackLocators.CREATE_RACK_FORM_FIELD_COMMENT,
        "Серийный номер": RackLocators.CREATE_RACK_FORM_FIELD_SERIAL,
        "Инвентарный номер": RackLocators.CREATE_RACK_FORM_FIELD_INVENTORY,
    }

    # Локаторы для combobox полей
    COMBOBOX_FIELDS_LOCATORS = {
        "Высота в юнитах": RackLocators.CREATE_RACK_FORM_SELECT_USIZE,
        "Глубина (мм)": RackLocators.CREATE_RACK_FORM_SELECT_DEPTH,
        "Ввод кабеля": RackLocators.CREATE_RACK_FORM_SELECT_CABLE_INPUT,
        "Состояние": RackLocators.CREATE_RACK_FORM_SELECT_CONDITION_TYPE,
        "Владелец": RackLocators.CREATE_RACK_FORM_SELECT_OWNER,
        "Обслуживающая организация": RackLocators.CREATE_RACK_FORM_SELECT_SERVICE_PROVIDER,
        "Проект/Титул": RackLocators.CREATE_RACK_FORM_SELECT_PROJECT,
    }

    def __init__(self, page: Page) -> None:
        """Инициализирует компонент формы создания стойки."""
        super().__init__(page, RackLocators.CREATE_RACK_FORM_CONTAINER)

    def fill_rack_data(self, rack_data: CreateRackData) -> Dict[str, int]:
        """Заполняет поля формы создания стойки."""
        results = {
            "text_fields_filled": 0,
            "combobox_fields_filled": 0,
        }

        self._fill_text_fields(rack_data, results)
        self._fill_combobox_fields(rack_data, results)

        logger.info(f"Filled {results['text_fields_filled']} text fields and "
                   f"{results['combobox_fields_filled']} combobox fields")
        return results
