-- configure-ish.sql — автонастройка ИШ НРД без GUI.
--
-- Снято как эталон с рабочей GUI-конфигурации (deploy/ish/params-reference.txt)
-- и параметризовано. Воспроизводит то, что оператор делал бы мышкой в
-- igate.exe (Avalonia): PostgreSQL + Web API + WSL-канал TEST3-GOST.
--
-- Применяется к свежей БД ИШ ПОСЛЕ того как схема создана через
-- `igate-cli --data <dir>` (он накатывает EF-миграции при первом подключении).
--
-- Подстановки (заменяются установщиком через psql -v):
--   :channel_name   — отображаемое имя канала, напр. 'TEST3 GOST'
--   :channel_code   — локальный код канала, напр. 'TEST3GOST'
--   :wsl_endpoint   — URL службы WSL НРД (TEST3-GOST)
--   :crypto_profile — имя профиля Валидаты ('moex')
--   :repository_code— код депонента из письма НРД ('MC0079200000')
--   :exchange_dir   — рабочая папка обмена ('/var/lib/igate/exchange')
--   :web_port       — порт Web API ('8090')
--
-- Пример:
--   psql -h 127.0.0.1 -U igate -d igate \
--     -v channel_name="'TEST3 GOST'" -v channel_code="'TEST3GOST'" \
--     -v wsl_endpoint="'https://gost-t3.nsd.ru/onyx-ms/OnyxEdoWSService/OnyxEdo'" \
--     -v crypto_profile="'moex'" -v repository_code="'MC0079200000'" \
--     -v exchange_dir="'/var/lib/igate/exchange'" -v web_port="'8090'" \
--     -f configure-ish.sql

BEGIN;

-- Чистим прежнюю конфигурацию (идемпотентность)
DELETE FROM parameters;
DELETE FROM channels;

-- --- Глобальные параметры: Web API (КРИТИЧНО — runEngineOnStartApp=True,
--     иначе движок не стартует в headless-режиме и Kestrel не поднимается) ---
INSERT INTO parameters(name, value, chanel_id) VALUES
  ('runEngineOnStartApp',                'True',        NULL),
  ('server.useServer',                   'True',        NULL),
  ('server.host',                        'localhost',   NULL),
  ('server.port',                        :web_port,     NULL),
  ('server.scheme',                      'Http',        NULL),
  ('server.authentication.enable',       'False',       NULL),
  ('server.authentication.userName',     '',            NULL),
  ('server.authentication.password',     '',            NULL),
  ('server.certificate.storage',         'File',        NULL),
  ('server.certificate.store.location',  'CurrentUser', NULL),
  ('server.certificate.store.name',      'My',          NULL),
  ('server.certificate.file.path',       '',            NULL),
  ('server.certificate.file.password',   '',            NULL),
  ('wsl.httpsMode',                      'Auto',        NULL),
  ('wsl.maxConnsPerServer',              '4',           NULL),
  ('wsl.proxy.mode',                     'None',        NULL),
  ('wsl.proxy.address',                  '',            NULL),
  ('wsl.proxy.port',                     '0',           NULL),
  ('wsl.proxy.username',                 '',            NULL),
  ('wsl.proxy.password',                 '',            NULL),
  ('enableDbLogging',                    'False',       NULL),
  ('cleanAutomatically',                 'False',       NULL),
  ('cleanAtTime',                        '00:30:00',    NULL),
  ('cleanWhenLarger',                    '1024',        NULL),
  ('cleanVacuum',                        'False',       NULL),
  ('storePeriod',                        '15',          NULL),
  ('archiveAutomatically',               'False',       NULL);

-- --- WSL-канал ---
-- ВАЖНО: ИШ резолвит канал по СОСТАВНОМУ коду = <код канала> + <код депонента>
-- (так формирует ИШ-GUI: TEST3 + MC0413600000 = TEST3MC0413600000). С коротким
-- кодом ИШ падает 'more than one Channel' и admin API не видит канал.
INSERT INTO channels(name, code, type, enable)
VALUES (:channel_name, :channel_code || :repository_code, 'WSL', true);

-- Параметры канала привязываем к его id (находим по составному коду)
INSERT INTO parameters(name, value, chanel_id)
SELECT n, v, c.id FROM channels c, (VALUES
  ('enable',                          'True'),
  ('wslEndpoint',                     :wsl_endpoint),
  ('cryptography.type',               'GOST'),
  ('cryptography.profile',            :crypto_profile),
  ('cryptography.pincode',            ''),
  ('cryptography.clientCertificateSerialNumber', ''),
  ('repositoryCode',                  :repository_code),
  ('fetchInterval',                   '00:01:00'),
  ('attemptInterval',                 '30000'),
  ('sendAttempts',                    '3'),
  ('maxPartSize',                     '500'),
  ('loadOldMessagesDepth',            '3'),
  ('isIncomingEnabled',               'True'),
  ('isOutgoingEnabled',               'True'),
  ('isTransitTerminalChannel',        'False'),
  ('useDirectories',                  'True'),
  ('dir',                             :exchange_dir),
  ('inboxDirName',                    'INBOX'),
  ('outboxDirName',                   'OUTBOX'),
  ('sentDirName',                     'SENT'),
  ('errorDirName',                    'ERRORS'),
  ('archive1042sDirName',             :exchange_dir || '/Archives1042S'),
  ('enableLockFile',                  'True'),
  ('enableAutoResponse',              'True'),
  ('enable1042ReportProcessing',      'True'),
  ('RenameOutgoingFiles',             'True'),
  ('generateReceivedPackageInfo',     'True'),
  ('generateSentPackageInfo',         'False'),
  ('moveReceiptsToSentFolder',        'False'),
  ('applyAddHashOfPackageToFolder',   'False'),
  ('ignorePackageDirectoryStructure', 'False'),
  ('checkReceivedPackageNsdSign',     'False'),
  ('checkReceivedPackageSenderSign',  'False'),
  ('autoUpdateTransitMember',         'False'),
  ('automaticcalyLoadCrls',           'False'),
  ('autoInPkgReportOffload',          'False'),
  ('monitoringThreshold',             '00:00:10'),
  -- Пустые параметры для полного соответствия эталону GUI (движок ожидает
  -- их наличие; отсутствие части может дать «Invalid value» при старте).
  ('autoLoadCrlsTime',                ''),
  ('fetchThreadCount',                ''),
  ('forceCryPackageEncryption',       ''),
  ('inPkgReportDirectory',            ''),
  ('inPkgReportOffloadInterval',      ''),
  ('maxPackagesPerJob',               ''),
  ('nsdCertificateSerialNumbers',     ''),
  ('pkiDecryptMode',                  ''),
  ('pkiEncryptMode',                  ''),
  ('pkiSignMode',                     ''),
  ('pkiVerifyMode',                   ''),
  ('receiveProcThreadCount',          ''),
  ('sendProcThreadCount',             ''),
  ('updateTransitMemberListTime',     '')
) AS p(n, v)
WHERE c.code = :channel_code || :repository_code;

COMMIT;

\echo 'ИШ настроен. Перезапустите igate-svc: systemctl restart igate'
