/*
  Сервис интеграции ПП Парус 8 с WEB API
  Модели данных: описатели параметров функций модуля обработки исходящих сообщений
*/

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

const Schema = require("validate"); //Схемы валидации
const { Queue } = require("./obj_queue"); //Схема валидации позиции очереди
const { OutQueueProcessorTask } = require("./obj_out_queue_processor"); //Схемы валидации объектов обработчика исходящих сообщений
const { Service } = require("./obj_service"); //Схема валидации сервиса
const { ServiceFunction } = require("./obj_service_function"); //Схема валидации функции сервиса

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

//Схема валидации параметров функции отправки ошибки обработки
exports.sendErrorResult = new Schema({
    //Сообщение об ошибке
    sMessage: {
        type: String,
        required: true,
        message: {
            type: path => `Сообщение об ошибке (${path}) имеет некорректный тип данных (ожидалось - String)`,
            required: path => `Не указано сообщение об ошибке (${path})`
        }
    }
});

//Схема валидации параметров функции обработчки сообщения сервером приложений
exports.appProcess = new Schema({
    //Обрабатываемое сообщение очереди
    queue: {
        schema: Queue,
        required: true,
        message: {
            required: path => `Не указано обрабатываемое сообщение очереди (${path})`
        }
    },
    //Cервис-обработчик
    service: {
        schema: Service,
        required: true,
        message: {
            required: path => `Не указан сервис для обработки сообщения очереди (${path})`
        }
    },
    //Функция сервиса-обработчика
    function: {
        schema: ServiceFunction,
        required: true,
        message: {
            required: path => `Не указана функция сервиса для обработки сообщения очереди (${path})`
        }
    },
    //Глобальный адрес прокси-сервера
    sProxy: {
        type: String,
        required: false,
        message: {
            type: path => `Глобальный адрес прокси-сервера (${path}) имеет некорректный тип данных (ожидалось - String)`,
            required: path => `Не указан глобальный адрес прокси-сервера (${path})`
        }
    }
});

//Схема валидации параметров функции обработчки сообщения сервером БД
exports.dbProcess = new Schema({
    //Обрабатываемое сообщение очереди
    queue: {
        schema: Queue,
        required: true,
        message: {
            required: path => `Не указано обрабатываемое сообщение очреди (${path})`
        }
    },
    //Функция сервиса-обработчика
    function: {
        schema: ServiceFunction,
        required: true,
        message: {
            required: path => `Не указана функция сервиса для обработки сообщения очереди (${path})`
        }
    }
});

//Параметры функции обработки сообщения
exports.processTask = new Schema({
    //Задача обработки
    task: {
        schema: OutQueueProcessorTask,
        required: true,
        message: {
            required: path => `Не указана задача для обработки (${path})`
        }
    }
});
