/**
 * src/config.js — общие константы и утилиты приложения.
 *
 * Вынесено из server.js чтобы:
 *   1. Роуты могли импортировать MOCK_USERS и backUrl без циклических зависимостей.
 *   2. Конфигурация была в одном месте — проще менять и тестировать.
 *
 * Этот файл не зависит ни от Express, ни от БД — чистые данные и функции.
 */

'use strict';

// ── Мок-пользователи (только dev/staging) ─────────────────────────────────────
// В продакшене этот список не используется — вход через Keycloak.
// clientId соответствует WZ-номеру компании в Nubes.
// companyId — UUID клиента (из Keycloak-токена в продакшене).
const MOCK_USERS = [
  {
    id:          'admin',
    label:       'АДМИН (WZ01112)',
    role:        'admin',
    isAdmin:     true,
    clientId:    'WZ01112',
    companyId:   'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee',
    companyName: 'Nubes',
    email:       'admin@nubes.ru',
  },
  {
    id:          'alfa',
    label:       'АЛЬФА (WZ88888)',
    role:        'user',
    isAdmin:     false,
    clientId:    'WZ88888',
    companyId:   '11111111-aaaa-aaaa-aaaa-111111111111',
    companyName: 'АЛЬФА',
    email:       'alfa@example.com',
  },
  {
    id:          'multi',
    label:       'АЛЬФА+БЕТА (WZ88888, WZ77777)',
    role:        'user',
    isAdmin:     false,
    clientId:    'WZ88888, WZ77777',
    companyId:   '11111111-aaaa-aaaa-aaaa-111111111111',
    companyName: 'АЛЬФА+БЕТА',
    email:       'multi@example.com',
  },
  {
    id:          'beta',
    label:       'БЕТА (WZ77777)',
    role:        'user',
    isAdmin:     false,
    clientId:    'WZ77777',
    companyId:   '22222222-bbbb-bbbb-bbbb-222222222222',
    companyName: 'БЕТА',
    email:       'beta@example.com',
  },
];

// ── backUrl — строит URL для редиректа после мутирующего действия ──────────────
//
// Логика:
//   • admin всегда видит страницу в контексте конкретной компании (?company=<id>).
//     Поэтому после POST /add, /edit, /delete редиректим туда же.
//   • Обычный пользователь видит только свою страницу — просто /.
//
// extra — дополнительные query-параметры, например { message: 'Добавлено' }
// или { error: 'Лимит исчерпан' }.
//
// Примеры:
//   backUrl(true,  42, { message: 'OK' })  → '/?company=42&message=OK'
//   backUrl(false, 42, { error: 'Err' })   → '/?error=Err'
//   backUrl(false, null, {})               → '/'
function backUrl(isAdmin, companyId, extra = {}) {
  const qs = new URLSearchParams();

  // Добавляем company только для admin и только если companyId задан
  if (isAdmin && companyId) qs.set('company', companyId);

  // Добавляем все дополнительные параметры (message, error, wasNormalized и др.)
  for (const [k, v] of Object.entries(extra)) qs.set(k, String(v));

  const str = qs.toString();
  return str ? '/?' + str : '/';
}

// ── Версия приложения (из package.json) ──────────────────────────────────────
// Читается один раз при загрузке модуля — require кешируется Node.js.
// Передаётся в шаблоны через app.locals чтобы отображаться в UI.
const { version: APP_VERSION } = require('../package.json');

module.exports = { MOCK_USERS, backUrl, APP_VERSION };
