const express = require('express');
const router = express.Router();
const renderPage = require('../utils/renderHelper');
const contratService = require('../services/contratService');
const globalService = require('../services/globalService');
const logger = require('../utils/logger');

router.get('/', (req, res) => {
    renderPage('contrat.ejs', res);
});

router.get('/read/numContrat/:numContrat', async (req, res) => {
    const numContrat = req.params.numContrat.toUpperCase();
    const contrat = await contratService.getContratByNumContrat(numContrat);

    res.json({ valid: Boolean(contrat), contrat });
});

router.get('/read/numSaisine/:numSaisine', async (req, res) => {
    const numSaisine = req.params.numSaisine.toUpperCase();
    const contrat = await contratService.getContratByNumSaisine(numSaisine);

    res.json({ valid: Boolean(contrat), contrat });
});

router.get('/read/id/:idContrat', async (req, res) => {
    const idContrat = req.params.idContrat;
    const contrat = await contratService.getContratById(idContrat);

    res.json({ valid: Boolean(contrat), contrat });
});

router.post('/create', async (req, res) => {
    const contrat = await contratService.createContrat();

    res.json({ valid: Boolean(contrat), contrat });
});

router.post('/update/:idContrat', async (req, res) => {
    const idContrat = req.params.idContrat;
    const data = req.body;
    const record = await globalService.updateRecordFromData("contrat", idContrat, data);

    res.json({ valid: Boolean(record) });
});

// Route pour modifier l'id client dans le contrat
router.post('/update/client/:idContrat/:idClient', async (req, res) => {
    const idClient = req.params.idClient;
    const idContrat = req.params.idContrat;
    const data = { "client": idClient };

    const record = await globalService.updateRecordFromData("contrat", idContrat, data);

    res.json({ valid: Boolean(record) });
});

// Route pour modifier l'id intermediaire dans le contrat
router.post('/update/intermediaire/:idContrat/:idIntermediaire', async (req, res) => {
    const idIntermediaire = req.params.idIntermediaire;
    const idContrat = req.params.idContrat;
    const data = { "intermediaire": idIntermediaire };

    const record = await globalService.updateRecordFromData("contrat", idContrat, data);

    res.json({ valid: Boolean(record) });
});

// Route pour modifier l'id client dans le contrat selon le produit en cours.
router.post('/update/:produit/:idContrat/:idEnCours', async (req, res) => {
    const idContrat = req.params.idContrat;
    const idEnCours = req.params.idEnCours;
    const produit = req.params.produit.toLocaleLowerCase();
    const data = { [produit]: idEnCours };

    const record = await globalService.updateRecordFromData("contrat", idContrat, data);

    res.json({ valid: Boolean(record) });
});

// Route pour modifier l'id client dans le contrat
router.post('/update/historique/:idContrat', async (req, res) => {
    const idContrat = req.params.idContrat;
    const historiqueData = req.body.historiqueData; // Les données d'historique envoyées depuis le front-end

    const contrat = await contratService.getContratById(idContrat);

    let historique = contrat.historique || []; // Récupérer l'historique existant ou initialiser un nouveau tableau

    // Ajouter les nouvelles données d'historique à l'historique existant
    historique = historique.concat(historiqueData);

    // Mettre à jour le champ "historique" dans le contrat avec le nouvel historique
    const updatedContrat = await globalService.updateRecordFromData("contrat", idContrat, { "historique": historique });

    res.json({ valid: Boolean(contrat), updatedContrat });
});

module.exports = router;
