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

from dataclasses import dataclass
from typing import Optional, 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("EDIT_RACK_FORM")


@dataclass
class EditRackData(BaseRackData):
    """Класс для хранения данных редактируемой стойки."""

    # Дополнительное поле для формы редактирования
    allocated_power: str = ""
    ventilation_panel: Optional[bool] = None


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

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

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

    # Маппинг checkbox полей
    CHECKBOX_FIELDS_MAPPING = {
        "Вентиляционная панель": ("ventilation_panel", "ventilation_checkbox"),
    }

    # Локаторы для текстовых полей
    TEXT_FIELDS_LOCATORS = {
        "Имя": RackLocators.EDIT_RACK_FORM_FIELD_NAME,
        "Комментарий": RackLocators.EDIT_RACK_FORM_FIELD_COMMENT,
        "Серийный номер": RackLocators.EDIT_RACK_FORM_FIELD_SERIAL,
        "Инвентарный номер": RackLocators.EDIT_RACK_FORM_FIELD_INVENTORY,
        "Выделенная мощность (Вт/ВА)": RackLocators.EDIT_RACK_FORM_FIELD_POWER,
    }

    # Локаторы для combobox полей
    COMBOBOX_FIELDS_LOCATORS = {
        "Ввод кабеля": RackLocators.EDIT_RACK_FORM_SELECT_CABLE_INPUT,
        "Состояние": RackLocators.EDIT_RACK_FORM_SELECT_CONDITION_TYPE,
        "Глубина (мм)": RackLocators.EDIT_RACK_FORM_SELECT_DEPTH,
        "Высота в юнитах": RackLocators.EDIT_RACK_FORM_SELECT_USIZE,
        "Владелец": RackLocators.EDIT_RACK_FORM_SELECT_OWNER,
        "Обслуживающая организация": RackLocators.EDIT_RACK_FORM_SELECT_SERVICE_PROVIDER,
        "Проект/Титул": RackLocators.EDIT_RACK_FORM_SELECT_PROJECT,
    }

    # Локаторы для checkbox полей
    CHECKBOX_FIELDS_LOCATORS = {
        "Вентиляционная панель": RackLocators.EDIT_RACK_FORM_CHECKBOX_VENTILATION,
    }

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

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

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

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