'use strict';

/**
 * src/api/index.js — REST API v1.
 *
 * Монтируется в server.js ДО общего auth.middleware:
 *   app.use('/api/v1', createApiRouter({ auth, q }))
 *
 * Аутентификация: только Bearer JWT (без сессий, без CSRF).
 * Ответы: JSON везде.
 * Переиспользует: src/queries.js, src/auth.js (middleware для валидации токена).
 *
 * Эндпоинты:
 *   GET    /api/v1/entries              — список записей компании
 *   POST   /api/v1/entries              — создать запись
 *   PATCH  /api/v1/entries/:id          — обновить запись
 *   DELETE /api/v1/entries/:id          — удалить запись
 *   GET    /api/v1/companies            — все компании (admin)
 *   PATCH  /api/v1/companies/:id/limit  — установить лимит (admin)
 */

const express = require('express');
const { requireBearer } = require('./middleware/bearerAuth');
const { createEntriesRouter } = require('./routes/entries');
const { createAdminRouter } = require('./routes/admin');

function createApiRouter({ auth, q }) {
  const router = express.Router();

  // Все /api/v1/* требуют Bearer — 401 JSON если нет токена
  router.use(requireBearer);
  // Валидация токена — Bearer-only (игнорирует сессию, всегда проверяет JWT)
  router.use(auth.bearerMiddleware);

  router.use('/entries', createEntriesRouter({ q }));
  router.use('/', createAdminRouter({ q }));

  return router;
}

module.exports = { createApiRouter };
