/*
    Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта
    Компонент панели: Диалог добавления/исправления показателя
*/

//---------------------
//Подключение библиотек
//---------------------

import React from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента
import { useDictionary } from "../hooks"; //Кастомные хуки
import { P8PDialog } from "../../../components/p8p_dialog"; //Типовой диалог

//-----------
//Тело модуля
//-----------

//Диалог добавления/исправления показателя
const DialogMarkIU = ({
    code = "",
    name = "",
    rowCode = "",
    rowVersion = "",
    columnCode = "",
    columnVersion = "",
    insert = true,
    onOk,
    onCancel
}) => {
    //Нажатие на кнопку "Ok"
    const handleOk = values => onOk && onOk({ ...values });

    //Нажатие на кнопку "Отмена"
    const handleCancel = () => onCancel && onCancel();

    //Хуки для работы со словарями
    const { selectRRPRow, selectRRPColumn } = useDictionary();

    //Выбор строки из словаря
    const selectRow = (currentFormValues, setFormValues) => {
        selectRRPRow(
            currentFormValues.rowCode,
            currentFormValues.rowVersion,
            selectResult =>
                selectResult &&
                setFormValues([
                    { name: "rowCode", value: selectResult.code },
                    { name: "rowVersion", value: selectResult.version }
                ])
        );
    };

    //Выбор графы из словаря
    const selectColumn = (currentFormValues, setFormValues) => {
        selectRRPColumn(
            currentFormValues.columnCode,
            currentFormValues.columnVersion,
            selectResult =>
                selectResult &&
                setFormValues([
                    { name: "columnCode", value: selectResult.code },
                    { name: "columnVersion", value: selectResult.version }
                ])
        );
    };

    //Генерация содержимого
    return (
        <P8PDialog
            title={`${insert === true ? "Добавление" : "Исправление"} показателя`}
            inputs={[
                { name: "code", value: code, label: "Мнемокод" },
                { name: "name", value: name, label: "Наименование" },
                { name: "rowCode", value: rowCode, label: "Строка", dictionary: selectRow },
                { name: "rowVersion", value: rowVersion, label: "Редакция строки", disabled: true },
                { name: "columnCode", value: columnCode, label: "Графа", dictionary: selectColumn },
                { name: "columnVersion", value: columnVersion, label: "Редакция графы", disabled: true }
            ]}
            onOk={handleOk}
            onCancel={handleCancel}
        />
    );
};

//Контроль свойств - Диалог добавления/исправления показателя
DialogMarkIU.propTypes = {
    code: PropTypes.string,
    name: PropTypes.string,
    rowCode: PropTypes.string,
    rowVersion: PropTypes.string,
    columnCode: PropTypes.string,
    columnVersion: PropTypes.string,
    insert: PropTypes.bool,
    onOk: PropTypes.func,
    onCancel: PropTypes.func
};

//----------------
//Интерфейс модуля
//----------------

export { DialogMarkIU };
