'use strict';

/**
 * ui/routes/auth.js — /login, /logout для UI-слоя.
 *
 * Два режима:
 *   Mock (DEV_MODE=true) — страница с пресетами MOCK_USERS.
 *                          Выбранный пользователь → генерируем mock Bearer token → session.token.
 *
 *   Token (всегда доступен) — форма вставки реального Bearer токена от auth-api/KC.
 *                             Вставленный токен → session.token (без проверки подписи здесь,
 *                             API сам проверит при первом запросе).
 *
 * /logout — уничтожает сессию.
 */

const { Router } = require('express');

function createRouter({ auth, MOCK_USERS, authLimiter }) {
  const router = Router();
  const devMode = () => process.env.DEV_MODE === 'true';

  // GET /login
  router.get('/login', (req, res) => {
    if (req.session && req.session.token) return res.redirect('/');
    res.render('ui-login', {
      devMode:    devMode(),
      MOCK_USERS: devMode() ? MOCK_USERS : [],
      error:      req.query.error || null,
      returnTo:   req.query.returnTo || '/',
    });
  });

  // POST /login — mock user
  router.post('/login', authLimiter, (req, res) => {
    const { clientId, returnTo } = req.body;
    if (!clientId) return res.redirect('/login?error=Выберите+пользователя');

    const user = MOCK_USERS.find(u => u.clientId === clientId);
    if (!user) return res.redirect('/login?error=Пользователь+не+найден');

    const token = auth.issueMockToken({
      clientId:    user.clientId,
      companyId:   user.companyId || '00000000-0000-0000-0000-000000000001',
      companyName: user.companyName || user.clientId,
      email:       user.email || user.clientId + '@mock.local',
    });

    req.session.token = token;
    req.session.user  = { clientId: user.clientId, email: user.email, isAdmin: user.isAdmin };
    res.redirect(returnTo || '/');
  });

  // POST /login-token — вставить реальный Bearer токен
  router.post('/login-token', authLimiter, (req, res) => {
    const { token, returnTo } = req.body;
    if (!token || !token.trim()) return res.redirect('/login?error=Токен+не+может+быть+пустым');

    req.session.token = token.trim();
    req.session.user  = null; // заполнится при первом запросе к API
    res.redirect(returnTo || '/');
  });

  // GET /logout
  router.get('/logout', (req, res) => {
    req.session.destroy(() => res.redirect('/login'));
  });

  return router;
}

module.exports = { createRouter };
