import { Router } from "express";
import { getRate, getRateHistories } from "../controllers/rateController";
import { verifyToken, authorizeModules } from "../middlewares/authJwt";

const routes = Router();

/**
 * @swagger
 * tags:
 *   name: Rate
 *   description: Tasas de cambio (USD, EUR)
 */

/**
 * @swagger
 * /rate:
 *   get:
 *     operationId: getRate
 *     tags: [Rate]
 *     summary: Obtener tasa de cambio actual
 *     description: Devuelve la tasa vigente del día (USD y EUR). Endpoint público sin autenticación.
 *     responses:
 *       200:
 *         description: Tasa obtenida correctamente
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               required: [success, data]
 *               properties:
 *                 success:
 *                   type: boolean
 *                   example: true
 *                 data:
 *                   type: object
 *                   properties:
 *                     usd:
 *                       type: number
 *                       description: Tasa USD/BS
 *                     eur:
 *                       type: number
 *                       description: Tasa EUR/BS
 *                       nullable: true
 *             example:
 *               success: true
 *               data:
 *                 usd: 370.25
 *                 eur: 395.50
 *       500:
 *         description: Error al obtener la tasa
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               required: [success, message]
 *               properties:
 *                 success:
 *                   type: boolean
 *                   example: false
 *                 message:
 *                   type: string
 *                   example: "Error getting rate"
 *             example:
 *               success: false
 *               message: "Error getting rate"
 */
routes.get("/", getRate);

routes.use(verifyToken, authorizeModules("rates"));

/**
 * @swagger
 * /rate/history:
 *   get:
 *     operationId: getRateHistory
 *     tags: [Rate]
 *     summary: Obtener historial de tasas
 *     description: Lista el historial de tasas de cambio con paginación. Requiere módulo "rates".
 *     security:
 *       - bearerAuth: []
 *     parameters:
 *       - in: query
 *         name: page
 *         schema:
 *           type: integer
 *           default: 1
 *         description: Número de página
 *       - in: query
 *         name: limit
 *         schema:
 *           type: integer
 *           default: 10
 *         description: Elementos por página
 *     responses:
 *       200:
 *         description: Historial de tasas obtenido correctamente
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               required: [success, message, data, totalCount]
 *               properties:
 *                 success:
 *                   type: boolean
 *                   example: true
 *                 message:
 *                   type: string
 *                   example: "Tasas obtenidas"
 *                 data:
 *                   type: array
 *                   items:
 *                     type: object
 *                     properties:
 *                       _id:
 *                         type: string
 *                       createdAt:
 *                         type: string
 *                         format: date-time
 *                       validDate:
 *                         type: string
 *                         format: date-time
 *                         description: Fecha de vigencia de la tasa
 *                       usd:
 *                         type: number
 *                         description: Tasa USD/BS
 *                 totalCount:
 *                   type: integer
 *                   description: Total de registros
 *             example:
 *               success: true
 *               message: "Tasas obtenidas"
 *               data:
 *                 - _id: "65a1b2c3d4e5f6789012345"
 *                   createdAt: "2026-03-09T14:30:00.000Z"
 *                   validDate: "2026-03-09T00:00:00.000Z"
 *                   usd: 370.25
 *                 - _id: "65a1b2c3d4e5f6789012346"
 *                   createdAt: "2026-03-08T14:30:00.000Z"
 *                   validDate: "2026-03-08T00:00:00.000Z"
 *                   usd: 369.80
 *               totalCount: 150
 *       401:
 *         $ref: "#/components/responses/Unauthorized"
 *       403:
 *         $ref: "#/components/responses/Forbidden"
 */
routes.get("/history", getRateHistories);

export default routes;
