// Routes SWAGGER - Documentation API
// Documentation: https://swagger.io/docs/specification/2-0/basic-structure/
// Les documentations sont volontairement séparées du code source pour des raisons de lisibilité et de maintenabilité.

/**
 * @swagger
 * /projects/{id}:
 *   delete:
 *     summary: Supprimer un projet par son ID
 *     description: Supprime un projet spécifique en utilisant son ID.
 *     parameters:
 *       - in: path
 *         name: id
 *         schema:
 *           type: integer
 *         required: true
 *         description: ID du projet
 *     responses:
 *       200:
 *         description: Projet supprimé avec succès.
 *       400:
 *         description: ID de projet invalide.
 *       500:
 *         description: Erreur serveur.
 */
/**
 * @swagger
 * /projects:
 *   get:
 *     summary: Récupérer tous les projets
 *     description: Récupère tous les projets disponibles.
 *     responses:
 *       200:
 *         description: Une liste de projets.
 *         content:
 *           application/json:
 *             schema:
 *               type: array
 *               items:
 *                 type: object
 *       500:
 *         description: Erreur serveur.
 */
/**
 * @swagger
 * /projects/{id}:
 *   get:
 *     summary: Récupérer un projet par ID
 *     description: Récupère un projet spécifique en utilisant son ID.
 *     parameters:
 *       - in: path
 *         name: id
 *         schema:
 *           type: integer
 *         required: true
 *         description: ID du projet
 *     responses:
 *       200:
 *         description: Un projet.
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *       400:
 *         description: ID de projet invalide.
 *       500:
 *         description: Erreur serveur.
 */
/**
 * @swagger
 * /projects/{id}/videos:
 *   get:
 *     summary: Récupérer les vidéos d'un projet par ID
 *     description: Récupère les vidéos associées à un projet spécifique en utilisant son ID.
 *     parameters:
 *       - in: path
 *         name: id
 *         schema:
 *           type: integer
 *         required: true
 *         description: ID du projet
 *     responses:
 *       200:
 *         description: Une liste de vidéos.
 *         content:
 *           application/json:
 *             schema:
 *               type: array
 *               items:
 *                 type: object
 *       400:
 *         description: ID de projet invalide.
 *       500:
 *         description: Erreur serveur.
 */
/**
 * @swagger
 * /projects/{id}/measurements:
 *   get:
 *     summary: Récupérer les mesures d'un projet par ID
 *     description: Récupère les mesures associées à un projet spécifique en utilisant son ID.
 *     parameters:
 *       - in: path
 *         name: id
 *         schema:
 *           type: integer
 *         required: true
 *         description: ID du projet
 *     responses:
 *       200:
 *         description: Une liste de mesures.
 *         content:
 *           application/json:
 *             schema:
 *               type: array
 *               items:
 *                 type: object
 *       400:
 *         description: ID de projet invalide.
 *       500:
 *         description: Erreur serveur.
 */
/**
 * @swagger
 * /projects:
 *   post:
 *     summary: Ajouter un nouveau projet
 *     description: Ajoute un nouveau projet à la base de données.
 *     requestBody:
 *       required: true
 *       content:
 *         application/json:
 *           schema:
 *             type: object
 *             properties:
 *               name:
 *                 type: string
 *               description:
 *                 type: string
 *     responses:
 *       201:
 *         description: Projet ajouté avec succès.
 *       400:
 *         description: Le nom et la description sont requis.
 *       500:
 *         description: Erreur serveur.
 */

/**
 * @swagger
 * /smile:
 *   get:
 *     summary: Retrieve a smile image
 *     responses:
 *       200:
 *         description: A smile image
 *         content:
 *           image/jpeg:
 *             schema:
 *               type: string
 *               format: binary
 *       404:
 *         description: Image not found
 */

/**
 * @swagger
 * /images/{projectId}/{orderId}:
 *   get:
 *     summary: Retrieve an image by project and order ID
 *     parameters:
 *       - in: path
 *         name: projectId
 *         required: true
 *         schema:
 *           type: string
 *         description: The project ID
 *       - in: path
 *         name: orderId
 *         required: true
 *         schema:
 *           type: string
 *         description: The order ID
 *     responses:
 *       200:
 *         description: An image file
 *         content:
 *           application/octet-stream:
 *             schema:
 *               type: string
 *               format: binary
 *       404:
 *         description: Image not found
 */
/**
 * @swagger
 * /images/{measurementId}:
 *   get:
 *     summary: Retrieve an image by measurement ID
 *     parameters:
 *       - in: path
 *         name: measurementId
 *         required: true
 *         schema:
 *           type: string
 *         description: The measurement ID
 *     responses:
 *       200:
 *         description: An image file
 *         content:
 *           application/octet-stream:
 *             schema:
 *               type: string
 *               format: binary
 *       404:
 *         description: Image not found
 */
/**
 * @swagger
 * /preview/{projectId}/{orderId}:
 *   get:
 *     summary: Retrieve a preview of an image by project and order ID
 *     parameters:
 *       - in: path
 *         name: projectId
 *         required: true
 *         schema:
 *           type: string
 *         description: The project ID
 *       - in: path
 *         name: orderId
 *         required: true
 *         schema:
 *           type: string
 *         description: The order ID
 *     responses:
 *       200:
 *         description: A resized preview of the image
 *         content:
 *           image/jpeg:
 *             schema:
 *               type: string
 *               format: binary
 *       404:
 *         description: Image not found
 *       500:
 *         description: Internal Server Error
 */
/**
 * @swagger
 * /measurements:
 *   get:
 *     summary: Récupérer toutes les mesures
 *     description: Récupère toutes les mesures de la base de données.
 *     responses:
 *       200:
 *         description: Une liste de mesures.
 *         content:
 *           application/json:
 *             schema:
 *               type: array
 *               items:
 *                 type: object
 *                 properties:
 *                   id:
 *                     type: integer
 *                   project_id:
 *                     type: integer
 *                   timestamp:
 *                     type: string
 *                     format: date-time
 *                   image_path:
 *                     type: string
 *                   temperature:
 *                     type: number
 *                   humidity:
 *                     type: number
 *       500:
 *         description: Erreur serveur.
 */
/**
 * @swagger
 * /measurements/{id}:
 *   get:
 *     summary: Récupérer une mesure par ID
 *     description: Récupère une mesure spécifique en utilisant son ID.
 *     parameters:
 *       - in: path
 *         name: id
 *         schema:
 *           type: integer
 *         required: true
 *         description: ID de la mesure
 *     responses:
 *       200:
 *         description: Une mesure.
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 id:
 *                   type: integer
 *                 project_id:
 *                   type: integer
 *                 timestamp:
 *                   type: string
 *                   format: date-time
 *                 image_path:
 *                   type: string
 *                 temperature:
 *                   type: number
 *                 humidity:
 *                   type: number
 *       400:
 *         description: ID de mesure invalide.
 *       500:
 *         description: Erreur serveur.
 */
/**
 * @swagger
 * /measurements/{projectId}/{orderId}:
 *   get:
 *     summary: Récupérer une mesure par project ID et order ID
 *     description: Récupère une mesure spécifique en utilisant le project ID et order ID.
 *     parameters:
 *       - in: path
 *         name: projectId
 *         schema:
 *           type: integer
 *         required: true
 *         description: ID du projet
 *       - in: path
 *         name: orderId
 *         schema:
 *           type: integer
 *         required: true
 *         description: ID de la commande
 *     responses:
 *       200:
 *         description: Une mesure.
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 id:
 *                   type: integer
 *                 project_id:
 *                   type: integer
 *                 timestamp:
 *                   type: string
 *                   format: date-time
 *                 image_path:
 *                   type: string
 *                 temperature:
 *                   type: number
 *                 humidity:
 *                   type: number
 *       400:
 *         description: ID de projet ou de commande invalide.
 *       500:
 *         description: Erreur serveur.
 */
/**
 * @swagger
 * /measurements/{id}:
 *   delete:
 *     summary: Supprimer une mesure par ID
 *     description: Supprime une mesure spécifique en utilisant son ID.
 *     parameters:
 *       - in: path
 *         name: id
 *         schema:
 *           type: integer
 *         required: true
 *         description: ID de la mesure
 *     responses:
 *       200:
 *         description: Mesure supprimée avec succès.
 *       400:
 *         description: ID de mesure invalide.
 *       500:
 *         description: Erreur serveur.
 */
/**
 * @swagger
 * /measurements/{projectId}/{orderId}:
 *   delete:
 *     summary: Supprimer une mesure par project ID et order ID
 *     description: Supprime une mesure spécifique en utilisant le project ID et order ID.
 *     parameters:
 *       - in: path
 *         name: projectId
 *         schema:
 *           type: integer
 *         required: true
 *         description: ID du projet
 *       - in: path
 *         name: orderId
 *         schema:
 *           type: integer
 *         required: true
 *         description: ID de la commande
 *     responses:
 *       200:
 *         description: Mesure supprimée avec succès.
 *       400:
 *         description: ID de projet ou de commande invalide.
 *       500:
 *         description: Erreur serveur.
 */
/**
 * @swagger
 * /videos:
 *   get:
 *     summary: Récupérer toutes les vidéos
 *     description: Récupère toutes les vidéos de la base de données.
 *     responses:
 *       200:
 *         description: Une liste de vidéos.
 *         content:
 *           application/json:
 *             schema:
 *               type: array
 *               items:
 *                 type: object
 *                 properties:
 *                   id:
 *                     type: integer
 *                   project_id:
 *                     type: integer
 *                   measurement_ids:
 *                     type: string
 *                   video_path:
 *                     type: string
 *                   start_timestamp:
 *                     type: string
 *                   end_timestamp:
 *                     type: string
 *                   image_count:
 *                     type: integer
 *                   resolution:
 *                     type: string
 *                   duration:
 *                     type: number
 *                   fps:
 *                     type: number
 *                   status:
 *                     type: integer
 *                   name:
 *                     type: string
 *       500:
 *         description: Erreur serveur.
 */
/**
 * @swagger
 * /videos/{id}:
 *   get:
 *     summary: Récupérer une vidéo par ID
 *     description: Récupère une vidéo spécifique en utilisant son ID.
 *     parameters:
 *       - in: path
 *         name: id
 *         schema:
 *           type: integer
 *         required: true
 *         description: ID de la vidéo
 *     responses:
 *       200:
 *         description: Une vidéo.
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 id:
 *                   type: integer
 *                 project_id:
 *                   type: integer
 *                 measurement_ids:
 *                   type: string
 *                 video_path:
 *                   type: string
 *                 start_timestamp:
 *                   type: string
 *                 end_timestamp:
 *                   type: string
 *                 image_count:
 *                   type: integer
 *                 resolution:
 *                   type: string
 *                 duration:
 *                   type: number
 *                 fps:
 *                   type: number
 *                 status:
 *                   type: integer
 *                 name:
 *                   type: string
 *       400:
 *         description: ID de vidéo invalide.
 *       500:
 *         description: Erreur serveur.
 */
/**
 * @swagger
 * /videos:
 *   post:
 *     summary: Créer une nouvelle vidéo
 *     description: Crée une nouvelle vidéo avec les informations fournies.
 *     requestBody:
 *       required: true
 *       content:
 *         application/json:
 *           schema:
 *             type: object
 *             properties:
 *               project_id:
 *                 type: integer
 *               measurement_ids:
 *                 type: string
 *               name:
 *                 type: string
 *               resolution:
 *                 type: string
 *               duration:
 *                 type: number
 *     responses:
 *       200:
 *         description: Vidéo créée avec succès.
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 message:
 *                   type: string
 *                 video:
 *                   type: object
 *                   properties:
 *                     project_id:
 *                       type: integer
 *                     measurement_ids:
 *                       type: string
 *                     name:
 *                       type: string
 *                     resolution:
 *                       type: string
 *                     duration:
 *                       type: number
 *       400:
 *         description: Tous les champs sont requis.
 *       500:
 *         description: Erreur serveur.
 */
/**
 * @swagger
 * /videos/{id}:
 *   delete:
 *     summary: Supprimer une vidéo par ID
 *     description: Supprime une vidéo spécifique en utilisant son ID.
 *     parameters:
 *       - in: path
 *         name: id
 *         schema:
 *           type: integer
 *         required: true
 *         description: ID de la vidéo
 *     responses:
 *       200:
 *         description: Vidéo supprimée avec succès.
 *       400:
 *         description: ID de vidéo invalide.
 *       404:
 *         description: Aucune vidéo trouvée avec cet ID.
 *       500:
 *         description: Erreur serveur.
 */
/**
 * @swagger
 * /videos/file/{video_id}:
 *   get:
 *     summary: Retrieve a video by video ID
 *     parameters:
 *       - in: path
 *         name: video_id
 *         required: true
 *         schema:
 *           type: string
 *         description: The video ID
 *     responses:
 *       200:
 *         description: A video file
 *         content:
 *           application/octet-stream:
 *             schema:
 *               type: string
 *               format: binary
 *       404:
 *         description: Video not found
 *       400:
 *         description: Video not yet produced
 */
/**
 * @swagger
 * /cat:
 *   get:
 *     summary: Retrieve a cat video
 *     responses:
 *       200:
 *         description: A cat video
 *         content:
 *           application/octet-stream:
 *             schema:
 *               type: string
 *               format: binary
 *       404:
 *         description: Video not found
 */
