// src/routes/cameraRoutes.js
const express = require('express');
const router = express.Router();
const CameraController = require('../controllers/cameraController');

/**
 * @swagger
 * /camera/status:
 *   get:
 *     tags:
 *       - Caméra
 *     summary: Récupère le statut actuel de la caméra
 *     description: Retourne les paramètres et l'état actuel du système de caméra
 *     responses:
 *       200:
 *         description: Statut de la caméra
 *         content:
 *           application/json:
 *             schema:
 *               $ref: '#/components/schemas/Camera'
 *       500:
 *         $ref: '#/components/responses/ServerError'
 */
router.get('/camera/status', CameraController.getCameraStatus);

/**
 * @swagger
 * /procedure/start:
 *   post:
 *     tags:
 *       - Caméra
 *     summary: Démarre une procédure de capture
 *     description: Démarre une nouvelle procédure de capture d'images à intervalle régulier
 *     requestBody:
 *       required: true
 *       content:
 *         application/json:
 *           schema:
 *             type: object
 *             properties:
 *               project_id:
 *                 type: integer
 *                 description: ID du projet pour lequel les images seront capturées
 *               interval:
 *                 type: integer
 *                 description: Intervalle entre deux captures (en secondes)
 *                 example: 30
 *               nb_images:
 *                 type: integer
 *                 description: Nombre total d'images à capturer
 *                 example: 48
 *               status:
 *                 type: integer
 *                 description: "Statut du projet: 0=brouillon, 1=capturing, 2=idle, 3=stopping"
 *             required:
 *               - project_id
 *               - interval
 *               - nb_images
 *     responses:
 *       200:
 *         description: Procédure démarrée avec succès
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 message:
 *                   type: string
 *                   example: Procédure de capture démarrée avec succès
 *                 settings:
 *                   type: object
 *                   properties:
 *                     interval:
 *                       type: integer
 *                       example: 30
 *                     nb_images:
 *                       type: integer
 *                       example: 48
 *       400:
 *         $ref: '#/components/responses/BadRequest'
 *       500:
 *         $ref: '#/components/responses/ServerError'
 */
router.post('/procedure/start', CameraController.startProcedure);

/**
 * @swagger
 * /procedure/stop:
 *   post:
 *     tags:
 *       - Caméra
 *     summary: Initie l'arrêt d'une procédure de capture
 *     description: Indique au système de caméra d'arrêter la procédure de capture en cours dès que possible
 *     responses:
 *       200:
 *         description: Procédure d'arrêt initiée
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 message:
 *                   type: string
 *                   example: Procédure d'arrêt de la caméra initiée avec succès
 *                 status:
 *                   type: integer
 *                   description: "Statut du projet: 0=brouillon, 1=capturing, 2=idle, 3=stopping"
 *       500:
 *         $ref: '#/components/responses/ServerError'
 */
router.post('/procedure/stop', CameraController.stopProcedure);

/**
 * @swagger
 * /camera/stop:
 *   post:
 *     tags:
 *       - Caméra
 *     summary: Confirme l'arrêt de la caméra
 *     description: Confirme que la caméra a bien été arrêtée (appelé par la caméra)
 *     responses:
 *       200:
 *         description: Caméra arrêtée avec succès
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 message:
 *                   type: string
 *                   example: Caméra arrêtée avec succès
 *                 status:
 *                   type: integer
 *                   description: "Statut du projet: 0=brouillon, 1=capturing, 2=idle, 3=stopping"
 *       500:
 *         $ref: '#/components/responses/ServerError'
 */
router.post('/camera/stop', CameraController.confirmStopProcedure);

/**
 * @swagger
 * /camera/maintenance:
 *   post:
 *     tags:
 *       - Caméra
 *     summary: Active le mode maintenance
 *     description: Place la caméra en mode maintenance pour empêcher les captures programmées
 *     responses:
 *       200:
 *         description: Mode maintenance activé
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 message:
 *                   type: string
 *                   example: Caméra en mode maintenance
 *                 status:
 *                   type: integer
 *                   description: "Statut du projet: 0=brouillon, 1=capturing, 2=idle, 3=stopping"
 *       500:
 *         $ref: '#/components/responses/ServerError'
 */
router.post('/camera/maintenance', CameraController.activateMaintenance);

/**
 * @swagger
 * /camera/maintenance/deactivate:
 *   post:
 *     tags:
 *       - Caméra
 *     summary: Désactive le mode maintenance
 *     description: Désactive le mode maintenance et permet à la caméra de reprendre les captures programmées
 *     responses:
 *       200:
 *         description: Mode maintenance désactivé
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 message:
 *                   type: string
 *                   example: Caméra sortie du mode maintenance
 *                 status:
 *                   type: integer
 *                   description: "Statut du projet: 0=brouillon, 1=capturing, 2=idle, 3=stopping"
 *       500:
 *         $ref: '#/components/responses/ServerError'
 */
router.post('/camera/maintenance/deactivate', CameraController.deactivateMaintenance);

module.exports = router;