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

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

import React, { useState } from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента
import { P8PDialog } from "../../../../components/p8p_dialog"; //Типовой диалог
import { TITLES } from "../../../../../app.text"; //Общие текстовые ресурсы приложения
import { DATA_TYPE } from "../../common"; //Общие константы редактора

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

//Диалог добавления/исправления аргумента запроса
const ArgIUDialog = ({ name = "", title = "", dataType = DATA_TYPE.NUMB, mandatory = 0, value = "", insert = true, onOk, onCancel }) => {
    //Собственное состояние - текущие значения полей аргумента запроса
    const [current, setCurrent] = useState({ name, title, dataType, mandatory, value });

    //Нажатие на кнопку "Ok"
    const handleOk = () => onOk && onOk(current);

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

    //При изменении значений в поле ввода
    const handleInputChange = (name, value) => {
        //Сохраним в состоянии новое значение, если сменили тип данных - сбросим "отладочное значение"
        setCurrent(pv => ({ ...pv, [name]: value, ...(name === "dataType" ? { value: "" } : {}) }));
        //Мы сами пересчитали форму, туда придут новые настройки элементов ввода через свойство inputs, не надо делать пересчет состояния внутри диалога
        return true;
    };

    //Генерация содержимого
    return (
        <P8PDialog
            title={`${insert === true ? TITLES.INSERT : TITLES.UPDATE} аргумента`}
            inputs={[
                { name: "name", value: current.name, label: "Имя", disabled: insert != true },
                { name: "title", value: current.title, label: "Приглашение" },
                {
                    name: "dataType",
                    value: current.dataType,
                    label: "Тип данных",
                    list: [
                        { name: "Строка", value: DATA_TYPE.STR },
                        { name: "Число", value: DATA_TYPE.NUMB },
                        { name: "Дата", value: DATA_TYPE.DATE }
                    ]
                },
                {
                    name: "mandatory",
                    value: current.mandatory,
                    label: "Обязательный",
                    list: [
                        { name: "Нет", value: 0 },
                        { name: "Да", value: 1 }
                    ]
                },
                {
                    name: "value",
                    value: current.value,
                    label: "Значение (для отладки)",
                    type: current.dataType === DATA_TYPE.NUMB ? "number" : current.dataType === DATA_TYPE.DATE ? "date" : "text"
                }
            ]}
            onOk={handleOk}
            onCancel={handleCancel}
            onInputChange={handleInputChange}
        />
    );
};

//Контроль свойств - Диалог добавления/исправления аргумента запроса
ArgIUDialog.propTypes = {
    name: PropTypes.string,
    title: PropTypes.string,
    dataType: PropTypes.number,
    mandatory: PropTypes.number,
    value: PropTypes.string,
    insert: PropTypes.bool,
    onOk: PropTypes.func,
    onCancel: PropTypes.func
};

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

export { ArgIUDialog };
