import express from "express";
import {
  getCreditScore,
  updateCreditScore,
} from "../controllers/creditScoreController";
import {
  authorizeModules,
  authorizeRoles,
  verifyToken,
} from "../middlewares/authJwt";

const routes = express.Router();

/**
 * @swagger
 * tags:
 *   name: CreditScore
 *   description: Puntuación de crédito
 */

routes.use(verifyToken, authorizeModules("credit-score"));

/**
 * @swagger
 * /credit-score:
 *   get:
 *     operationId: getCreditScore
 *     tags: [CreditScore]
 *     summary: Obtener puntuación de crédito
 *     security:
 *       - bearerAuth: []
 *     responses:
 *       200:
 *         description: Configuración de puntuación obtenida correctamente
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               required: [success, data]
 *               properties:
 *                 success:
 *                   type: boolean
 *                   example: true
 *                 data:
 *                   type: array
 *                   items:
 *                     type: object
 *                     properties:
 *                       code:
 *                         type: string
 *                       name:
 *                         type: string
 *                       score:
 *                         type: number
 *                       items:
 *                         type: array
 *                         items:
 *                           type: object
 *                           properties:
 *                             name:
 *                               type: string
 *                             code:
 *                               type: string
 *                             value:
 *                               type: number
 *                 minScore:
 *                   type: number
 *                   description: Puntuación mínima configurada
 *             example:
 *               success: true
 *               data:
 *                 - code: "age"
 *                   name: "Edad"
 *                   score: 10
 *                   items:
 *                     - name: "18-25"
 *                       code: "18-25"
 *                       value: 5
 *               minScore: 60
 *       404:
 *         description: Configuración no encontrada
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 message:
 *                   type: string
 *                   example: "Credit score not found"
 *                 error:
 *                   description: Detalle del error
 *       401:
 *         $ref: "#/components/responses/Unauthorized"
 *       403:
 *         $ref: "#/components/responses/Forbidden"
 *   put:
 *     operationId: updateCreditScore
 *     tags: [CreditScore]
 *     summary: Actualizar puntuación de crédito
 *     security:
 *       - bearerAuth: []
 *     requestBody:
 *       required: true
 *       content:
 *         application/json:
 *           schema:
 *             type: object
 *             properties:
 *               items:
 *                 type: array
 *                 description: Lista de actualizaciones por criterio
 *                 items:
 *                   type: object
 *                   properties:
 *                     code:
 *                       type: string
 *                       description: Código del criterio (ej. age, income)
 *                     score:
 *                       type: number
 *                     items:
 *                       type: array
 *                       items:
 *                         type: object
 *                         properties:
 *                           code:
 *                             type: string
 *                           value:
 *                             type: number
 *               minScore:
 *                 type: number
 *                 description: Puntuación mínima a configurar
 *           example:
 *             items:
 *               - code: "age"
 *                 score: 15
 *                 items:
 *                   - code: "18-25"
 *                     value: 10
 *             minScore: 65
 *     responses:
 *       200:
 *         description: Puntuación actualizada correctamente
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 success:
 *                   type: boolean
 *                   example: true
 *                 message:
 *                   type: string
 *                   example: "Credit score updated successfully"
 *             example:
 *               success: true
 *               message: "Credit score updated successfully"
 *       404:
 *         description: Error al actualizar
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 success:
 *                   type: boolean
 *                   example: false
 *                 message:
 *                   type: string
 *                 error:
 *                   description: Detalle del error
 *             examples:
 *               min_score:
 *                 summary: Error actualizando min score
 *                 value:
 *                   success: false
 *                   message: "Min score not updated"
 *                   error: null
 *               credit_score:
 *                 summary: Error actualizando credit score
 *                 value:
 *                   success: false
 *                   message: "Credit score not updated"
 *                   error: null
 *       401:
 *         $ref: "#/components/responses/Unauthorized"
 *       403:
 *         $ref: "#/components/responses/Forbidden"
 */
routes.route("/").get(getCreditScore).put(updateCreditScore);

export default routes;
