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

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

import PropTypes from "prop-types"; //Контроль свойств компонента
import client from "../../core/client"; //Клиент БД
import { CAPTIONS } from "../../../app.text"; //Общие текстовые ресурсы

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

//Типы даных аргументов
const P8P_DATA_SOURCE_ARGUMENT_DATA_TYPE = {
    STR: client.SERV_DATA_TYPE_STR,
    NUMB: client.SERV_DATA_TYPE_NUMB,
    DATE: client.SERV_DATA_TYPE_DATE
};

//Структура аргумента источника данных
const P8P_DATA_SOURCE_ARGUMENT_SHAPE = PropTypes.shape({
    name: PropTypes.string.isRequired,
    caption: PropTypes.string.isRequired,
    dataType: PropTypes.oneOf(Object.values(P8P_DATA_SOURCE_ARGUMENT_DATA_TYPE)),
    req: PropTypes.bool.isRequired,
    value: PropTypes.any,
    valueSource: PropTypes.string
});

//Начальное состояние аргумента источника данных
const P8P_DATA_SOURCE_ARGUMENT_INITIAL = {
    name: "",
    caption: "",
    dataType: "",
    req: false,
    value: "",
    valueSource: ""
};

//Типы источников данных
const P8P_DATA_SOURCE_TYPE = {
    USER_PROC: "USER_PROC",
    QUERY: "QUERY"
};

//Типы источников данных (наименования)
const P8P_DATA_SOURCE_TYPE_NAME = {
    [P8P_DATA_SOURCE_TYPE.USER_PROC]: CAPTIONS.USER_PROC,
    [P8P_DATA_SOURCE_TYPE.QUERY]: CAPTIONS.QUERY
};

//Структура источника данных
const P8P_DATA_SOURCE_SHAPE = PropTypes.shape({
    type: PropTypes.oneOf([...Object.values(P8P_DATA_SOURCE_TYPE), ""]),
    userProc: PropTypes.string,
    stored: PropTypes.string,
    respArg: PropTypes.string,
    arguments: PropTypes.arrayOf(P8P_DATA_SOURCE_ARGUMENT_SHAPE)
});

//Начальное состояние истоника данных
const P8P_DATA_SOURCE_INITIAL = {
    type: "",
    userProc: "",
    query: "",
    stored: "",
    respArg: "",
    arguments: []
};

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

export {
    P8P_DATA_SOURCE_ARGUMENT_DATA_TYPE,
    P8P_DATA_SOURCE_ARGUMENT_INITIAL,
    P8P_DATA_SOURCE_SHAPE,
    P8P_DATA_SOURCE_TYPE,
    P8P_DATA_SOURCE_TYPE_NAME,
    P8P_DATA_SOURCE_INITIAL
};
