const express = require('express');
const router = express.Router();
const path = require('path');
const fs = require('fs');
const dbTester = require('../test/tester');
const db = require('../db');
const serverError = require('../utils/serverError');

const minInterval = 3; // Minutes
//const maxInterval = 60; // Minutes

var captureProjectID = -1;
var captureInterval = 0; // Minutes

/**
 * @swagger
 * /procedure/start/:
 *   post:
 *     summary: Start the capture procedure
 *     description: Starts the capture procedure with the given project ID and interval.
 *     requestBody:
 *       required: true
 *       content:
 *         application/json:
 *           schema:
 *             type: object
 *             properties:
 *               projectId:
 *                 type: integer
 *                 description: The ID of the project to start capturing.
 *               interval:
 *                 type: integer
 *                 description: The interval in minutes for the capture.
 *     responses:
 *       200:
 *         description: Capture procedure started successfully.
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 message:
 *                   type: string
 *                   example: "Procédure de capture démarrée avec succès, projet ID: 1, interval: 10 minutes."
 *       500:
 *         description: Internal server error.
 */
router.post('/procedure/start/', async (req, res) => {
   const { projectId, interval } = req.body;
    try {
         const result = startProcedure(projectId, interval);
         res.status(200).json(result);
    } catch (err) {
         serverError.sendError('Erreur lors du démarrage de la procédure de capture:', res, err);
    }
});

function startProcedure(projectId, interval) {
   //vérifier qu'un projet n'est pas déjà en cours
   if (captureProjectID != -1) {
      return { message: 'Caméra Occupée : Le projet ID ' + captureProjectID + ' est déjà en cours de capture.' };
   }
   console.log('Démarrage de la procédure de capture');
   exists = db.query('SELECT * FROM public.projects WHERE id = $1', [projectId]);
   if (!exists) {
      return { message: 'Le projet ID ' + projectId + ' n\'existe pas.' };
   }
   if (interval < minInterval) {
      return { message: 'L\'intervalle de capture doit être supérieur ou égal à ' + minInterval + ' minutes.' };
   }
   // if (interval > maxInterval) {
   //    return { message: 'L\'intervalle de capture doit être inférieur ou égal à ' + maxInterval + ' minutes.' };
   // }

   // Application des valeurs
   captureProjectID = projectId;
   captureInterval = interval;
   console.log('Procédure de capture démarrée avec succès, projet ID: ' + projectId + ', interval: ' + interval + ' minutes.');
   return { message: 'Procédure de capture démarrée avec succès, projet ID: ' + projectId + ', interval: ' + interval + ' minutes.' };
}

function stopProcedure() {
   oldProjectID = captureProjectID;
   oldInterval = captureInterval;
   console.log('Ancien Projet : ' + oldProjectID + ', Ancien Intervalle : ' + oldInterval);

   // Application du reset
   captureProjectID = -1;
   captureInterval = 0;
   console.log('Nouveau Projet : ' + captureProjectID + ', Nouvel Intervalle : ' + captureInterval);

   console.log('Arrêt de la procédure de capture');
   return { message: 'Procédure de capture arrêtée avec succès, projet ID: ' + oldProjectID + ', interval: ' + oldInterval + ' minutes.' };
}

/**
 * @swagger
 * /procedure/stop/:
 *   post:
 *     summary: Stop the capture procedure
 *     description: Stops the capture procedure.
 *     responses:
 *       200:
 *         description: Capture procedure stopped successfully.
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 message:
 *                   type: string
 *                   example: "Procédure de capture arrêtée avec succès."
 *       500:
 *         description: Internal server error.
 */
router.post('/procedure/stop/', async (req, res) => {
   try {
      const result = stopProcedure();
      res.status(200).json(result);
   } catch (err) {
      serverError.sendError('Erreur lors de l\'arrêt de la procédure de capture:', res, err);
   }
});

module.exports = router;
