/*
    Парус 8 - Панели мониторинга - Редакторы панелей
    Общие ресурсы компонента "Редактор действия"
*/

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

import PropTypes from "prop-types"; //Контроль свойств компонента

//---------
//Константы
//---------

//Значения типа по умолчанию
const P8P_CA_DEF_TYPE_VALUE = {
    TEXT_VALUE: "Значение",
    VARIABLE: "Переменная"
};

//Типы значений по умолчанию
const P8P_CA_DEF_VALUE_TYPES = [...Object.values(P8P_CA_DEF_TYPE_VALUE)];

//Типы действия
const P8P_CA_TYPE = {
    openUnit: { code: "openUnit", name: "Открыть раздел", icon: "article" },
    openPanel: { code: "openPanel", name: "Открыть панель", icon: "storage" },
    setVariable: { code: "setVariable", name: "Установить переменную", icon: "mediation" }
};

//Список полей связываемых с проводником значений
const P8P_CA_SOURCE_FIELDS = ["variableSource"];

//Список полей хранящих объект типа {"Тип", "Значение"}, где может храниться связь с проводником значений
const P8P_CA_OBJECT_SOURCE_FIELDS = ["resultValue", "tabValue", "panelValue"];

//Структура значения с типом
const P8P_CA_OBJECT_VALUE_SHAPE = PropTypes.shape({
    type: PropTypes.string,
    value: PropTypes.string
});

//Структура входных параметров метода вызова
const P8P_CA_INPUT_PARAM_SHAPE = PropTypes.shape({
    parameter: PropTypes.string,
    inputParameter: PropTypes.string,
    resultValue: P8P_CA_OBJECT_VALUE_SHAPE
});

//Структура параметров действия "Открыть раздел"
const P8P_CA_OPEN_UNIT_PARAMS_SHAPE = PropTypes.shape({
    unitCode: PropTypes.string,
    unitName: PropTypes.string,
    showMethod: PropTypes.string,
    showMethodName: PropTypes.string,
    inputParams: PropTypes.arrayOf(P8P_CA_INPUT_PARAM_SHAPE),
    modal: PropTypes.bool
});

//Структура параметров действия "Открыть панель"
const P8P_CA_OPEN_PANEL_PARAMS_SHAPE = PropTypes.shape({
    tabValue: P8P_CA_OBJECT_VALUE_SHAPE,
    panelValue: P8P_CA_OBJECT_VALUE_SHAPE
});

//Структура связи переменной действия "Установить переменную"
const P8P_CA_VARIABLE_LINK_SHAPE = PropTypes.shape({
    variableSource: PropTypes.string,
    resultValue: P8P_CA_OBJECT_VALUE_SHAPE
});

//Структура действия
const P8P_CA_SHAPE = PropTypes.shape({
    type: PropTypes.oneOf(Object.keys(P8P_CA_TYPE)).isRequired,
    area: PropTypes.string,
    element: PropTypes.string,
    params: PropTypes.oneOfType([P8P_CA_OPEN_UNIT_PARAMS_SHAPE, P8P_CA_OPEN_PANEL_PARAMS_SHAPE, PropTypes.arrayOf(P8P_CA_VARIABLE_LINK_SHAPE)])
});

//Начальное состояние объекта значения с типом
const P8P_CA_OBJECT_VALUE_INITIAL = {
    type: P8P_CA_DEF_TYPE_VALUE.TEXT_VALUE,
    value: ""
};

//Начальное состояние входного параметра метода вызова
const P8P_CA_INPUT_PARAM_INITIAL = {
    parameter: "",
    inputParameter: "",
    resultValue: { ...P8P_CA_OBJECT_VALUE_INITIAL }
};

//Начальное состояние параметров действия "Открыть раздел"
const P8P_CA_OPEN_UNIT_INITIAL = {
    unitCode: "",
    unitName: "",
    showMethod: "",
    showMethodName: "",
    inputParams: [],
    modal: true
};

//Начальное состояние параметров действия "Открыть панель"
const P8P_CA_OPEN_PANEL_INITIAL = {
    tabValue: { ...P8P_CA_OBJECT_VALUE_INITIAL },
    panelValue: { ...P8P_CA_OBJECT_VALUE_INITIAL }
};

//Начальное состояние параметра связи действия "Установить переменную"
const P8P_CA_VARIABLE_LINK_INITIAL = {
    variableSource: "",
    resultValue: { ...P8P_CA_OBJECT_VALUE_INITIAL }
};

//Начальное состояние действия
const P8P_CA_INITIAL = {
    type: P8P_CA_TYPE.openUnit.code,
    area: "",
    element: "",
    params: { ...P8P_CA_OPEN_UNIT_INITIAL }
};

//Начальное состояние действий
const P8P_CAS_INITIAL = [];

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

export {
    P8P_CA_DEF_TYPE_VALUE,
    P8P_CA_DEF_VALUE_TYPES,
    P8P_CA_TYPE,
    P8P_CA_SOURCE_FIELDS,
    P8P_CA_OBJECT_SOURCE_FIELDS,
    P8P_CA_OBJECT_VALUE_SHAPE,
    P8P_CA_OPEN_UNIT_PARAMS_SHAPE,
    P8P_CA_OPEN_PANEL_PARAMS_SHAPE,
    P8P_CA_VARIABLE_LINK_SHAPE,
    P8P_CA_SHAPE,
    P8P_CA_INPUT_PARAM_INITIAL,
    P8P_CA_OPEN_UNIT_INITIAL,
    P8P_CA_OPEN_PANEL_INITIAL,
    P8P_CA_VARIABLE_LINK_INITIAL,
    P8P_CA_INITIAL,
    P8P_CAS_INITIAL
};
