// src/routes/imageRoutes.js
const express = require('express');
const router = express.Router();
const multer = require('multer');
const ImageController = require('../controllers/imageController');

// Configuration de Multer pour le téléchargement des images
const upload = multer({ storage: multer.memoryStorage() });

/**
 * @swagger
 * /smile:
 *   get:
 *     summary: Récupère une image de test (smile)
 *     responses:
 *       200:
 *         description: Image de test
 *       404:
 *         description: Image non trouvée
 *       500:
 *         description: Erreur serveur
 */
router.get('/smile', ImageController.getSmileImage);

/**
 * @swagger
 * /images/{projectId}/{orderId}:
 *   get:
 *     summary: Récupère une image par projet ID et ordre ID
 *     parameters:
 *       - in: path
 *         name: projectId
 *         required: true
 *         schema:
 *           type: integer
 *         description: ID du projet
 *       - in: path
 *         name: orderId
 *         required: true
 *         schema:
 *           type: integer
 *         description: ID d'ordre
 *     responses:
 *       200:
 *         description: Image
 *       400:
 *         description: IDs invalides
 *       404:
 *         description: Image non trouvée
 *       500:
 *         description: Erreur serveur
 */
router.get('/images/:projectId/:orderId', ImageController.getImageByProjectAndOrderId);

/**
 * @swagger
 * /images/{measurementId}:
 *   get:
 *     summary: Récupère une image par ID de mesure
 *     parameters:
 *       - in: path
 *         name: measurementId
 *         required: true
 *         schema:
 *           type: integer
 *         description: ID de la mesure
 *     responses:
 *       200:
 *         description: Image
 *       400:
 *         description: ID invalide
 *       404:
 *         description: Image non trouvée
 *       500:
 *         description: Erreur serveur
 */
router.get('/images/:measurementId', ImageController.getImageByMeasurementId);

/**
 * @swagger
 * /preview/{projectId}/{orderId}:
 *   get:
 *     summary: Récupère un aperçu d'une image
 *     parameters:
 *       - in: path
 *         name: projectId
 *         required: true
 *         schema:
 *           type: integer
 *         description: ID du projet
 *       - in: path
 *         name: orderId
 *         required: true
 *         schema:
 *           type: integer
 *         description: ID d'ordre
 *     responses:
 *       200:
 *         description: Aperçu d'image redimensionné
 *       400:
 *         description: IDs invalides
 *       404:
 *         description: Image non trouvée
 *       500:
 *         description: Erreur serveur
 */
router.get('/preview/:projectId/:orderId', ImageController.getImagePreview);

/**
 * @swagger
 * /camera/upload:
 *   post:
 *     summary: Télécharge une image avec données de mesure
 *     requestBody:
 *       required: true
 *       content:
 *         multipart/form-data:
 *           schema:
 *             type: object
 *             properties:
 *               image:
 *                 type: string
 *                 format: binary
 *               projectId:
 *                 type: integer
 *               timestamp:
 *                 type: string
 *                 format: date-time
 *               temperature:
 *                 type: number
 *               humidity:
 *                 type: number
 *     responses:
 *       200:
 *         description: Image téléchargée avec succès
 *       400:
 *         description: Paramètres invalides
 *       500:
 *         description: Erreur serveur
 */
router.post('/camera/upload', upload.single('image'), ImageController.uploadImage);

module.exports = router;