/*
  Сервис интеграции ПП Парус 8 с WEB API
  Конфигурация сервера приложений
*/

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

//Общие параметры
let common = {
    //Наименование сервера приложений
    sServerName: "",
    //Версия сервера приложений
    sVersion: "8.5.6.1",
    //Релиз сервера приложений
    sRelease: "2026.07.29",
    //Таймаут останова сервера (мс)
    nTerminateTimeout: 60000,
    //Контролировать версию Системы
    bControlSystemVersion: true
};

//Параметры подключения к БД
let dbConnect = {
    //Пользователь БД
    sUser: "exs",
    //Пароль пользователя БД
    sPassword: "exs",
    //Схема размещения используемых объектов БД
    sSchema: "PARUS",
    //Строка подключения к БД
    sConnectString: "",
    //Наименование сервера приложений в сессии БД
    sSessionAppName: "PARUS$ExchangeServer",
    //Подключаемый модуль обслуживания БД (низкоуровневые функции работы с СУБД)
    sConnectorModule: "parus_oracle_db.js",
    //Применение "тонкого" (Thin) или "толстого" (Thick) режима подключения (false - Thick-режим - работа через установленного клиента СУБД Oracle, true - Thin-режим - не требует установки клиента СУБД Oracle, допустим только для Oracle >= 12.1)
    bOraUseThinMode: false,
    //Путь к домашней директории Oracle Client (только для Thick-режима подключения к СУБД Oracle, если значение не указано, то будет использоваться значение из переменной окружения "PATH" ОС)
    sOraClient: ""
};

//Параметры обработки очереди исходящих сообщений
let outGoing = {
    //Проверять SSL-сертификаты адресов отправки сообщений (самоподписанные сертификаты будут отвергнуты)
    bValidateSSL: true,
    //Количество одновременно обрабатываемых исходящих сообщений
    nMaxWorkers: 1,
    //Интервал проверки наличия исходящих сообщений (мс)
    nCheckTimeout: 500,
    //Минимальный размер пула подключений к БД для обработчика исходящих сообщений
    nPoolMin: 4,
    //Максимальный размер пула подключений к БД для обработчика исходящих сообщений
    nPoolMax: 4,
    //Шаг инкремента подключений к БД в пуле обработчика исходящих сообщений
    nPoolIncrement: 0,
    //Глобальный адрес прокси-сервера
    sProxy: null,
    //Таймаут параллельного процесса обработки исходящего сообщения (мс, если задан атрибут "nTimeoutWorker" функции сервиса обмена - игнорируется, 0 - не применять)
    nWorkerTimeout: 0
};

//Параметры обработки очереди входящих сообщений
let inComing = {
    //Порт сервера входящих сообщений
    nPort: 8080,
    //IP-адрес сервера приложений (0.0.0.0 - все доступные)
    sHost: "0.0.0.0",
    //Максимальный размер входящего сообщения (мб)
    nMsgMaxSize: 10,
    //Каталог размещения статических ресурсов
    sStaticDir: "static",
    //Минимальный размер пула подключений к БД для обработчика входящих сообщений
    nPoolMin: 10,
    //Максимальный размер пула подключений к БД для обработчика входящих сообщений
    nPoolMax: 10,
    //Шаг инкремента подключений к БД в пуле обработчика входящих сообщений
    nPoolIncrement: 0,
    //Время ожидания отработки входящего сообщения (мс, 0 - не применять (не отменяет таймаут по умолчанию, который может быть установлен платформой))
    nTimeout: 0
};

//Параметры подключения к Kafka
const kafka = [
    {
        //Мнемокод сервиса обмена (пусто - использовать по умолчанию)
        sService: "",
        //ID клиента-отправителя
        sClientIdSender: "Parus",
        //ID клиента-получателя
        sClientIdRecipient: "Parus",
        //Группа получателя
        sGroupId: "Parus",
        //Время ожидания успешного подключения (мс)
        nConnectionTimeout: 5000,
        //Необходимость попытки переподключения при потере соединения
        bRestartOnFailure: true,
        //Время максимального ожидания между попытками переподключения (мс)
        nMaxRetryTime: 20000,
        //Время ожидания между попытками переподключения (мс)
        nInitialRetryTime: 10000,
        //Уровень протоколирования подключения (NOTHING - ничего, ERROR - ошибки, WARN - предупреждения, INFO - общая информация)
        sLogLevel: "NOTHING",
        //Использовать аутентификацию по SSL-сертификату
        bAuthSSL: false,
        //Параметры аутентификации по SSL-сертификату
        ssl: {
            //Запрещать использование самоподписанных сертификатов (true - запретить, false - разрешить)
            bRejectUnauthorized: true,
            //Путь к корневому сертификату с информацией об удостоверяющем центре
            sPathCa: "",
            //Путь к закрытому ключу
            sPathKey: "",
            //Путь к сертификату
            sPathCert: ""
        }
    }
];

//Параметры подключения к MQTT
const mqtt = [
    {
        //Мнемокод сервиса обмена (пусто - использовать по умолчанию)
        sService: "",
        //ID клиента-отправителя
        sClientIdSender: "Parus",
        //ID клиента-получателя (если равен sClientIdSender, то отправленные сообщения будут игнорироваться)
        sClientIdRecipient: "ParusRecipient",
        //Время ожидания успешного подключения (мс)
        nConnectTimeout: 5000,
        //Время ожидания между попытками переподключения (мс)
        nReconnectPeriod: 10000,
        //Уровень протоколирования подключения (NOTHING - ничего, ERROR - ошибки, INFO - общая информация)
        sLogLevel: "NOTHING"
    }
];

//Параметры отправки E-Mail уведомлений
let mail = {
    //Адреc сервера SMTP
    sHost: "",
    //Порт сервера SMTP
    nPort: 465,
    //Использовать безопасное соединение SMTP (true - использование TLS/SSL, false - использование только в случае наличия STARTTLS)
    bSecure: true,
    //Имя пользователя SMTP-сервера
    sUser: "",
    //Пароль пользователя SMTP-сервера
    sPass: "",
    //Запрещать использование самоподписанных сертификатов (true - запретить, false - разрешить)
    bRejectUnauthorized: true,
    //Наименование отправителя для исходящих сообщений
    sFrom: ""
};

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

module.exports = {
    common,
    dbConnect,
    outGoing,
    inComing,
    kafka,
    mqtt,
    mail
};
