const express = require('express');
const cors = require('cors');
const path = require('path');
const app = express();
const bodyParser = require('body-parser');
const fs = require('fs');


app.use(cors());
app.use(express.json());

app.post('/api/submit', (req, res) => {
    const data = req.body;
    console.log('Données reçues (client->server) :', data);

    // Lecture du fichier ./src/data.json
    fs.readFile('./src/data.json', 'utf8', (err, fileData) => {
        let json = [];
        if (!err && fileData) {
            try {
                json = JSON.parse(fileData);
            } catch (e) {
                console.error('Erreur de parsing JSON:', e);
            }
        }
        // Ajout des nouvelles données au tableau
        json.push(data);

        // Réécriture du fichier avec les données mises à jour
        fs.writeFile('./src/data.json', JSON.stringify(json, null, 2), (writeErr) => {
            if (writeErr) {
                console.error('Erreur d\'écriture:', writeErr);
                return res.status(500).json({ success: false, message: 'Erreur lors de la sauvegarde' });
            }
            res.json({ success: true, message: 'Données sauvegardées' });
        });
    });
});

app.post('/api/getanswers', (req, res) => {
  console.log('/api/getanswers');

  const uniqueId = req.headers['x-unique-id'];

  if (!uniqueId) {
      console.log('Unique ID non fourni dans les en-têtes');
      return res.status(400).send('Unique ID is required');
  }

  console.log('Unique ID reçu:', uniqueId);

  const filePath = path.join(__dirname, './src/data.json');

  fs.readFile(filePath, 'utf8', (err, data) => {
      if (err) {
          console.error('Erreur lors de la lecture du fichier ./src/data.json:', err);
          res.status(500).send('Erreur lors de la lecture des données.');
          return;
      }

      try {
          if (!data.trim()) {
              console.log('Fichier ./src/data.json vide');
              res.json([]);
              return;
          }

          const jsonData = JSON.parse(data);

          if (!Array.isArray(jsonData)) {
              throw new Error('Le contenu de ./src/data.json n\'est pas un tableau');
          }

        //   console.log('Données lues dans ./src/data.json:', JSON.stringify(jsonData, null, 2));
        console.log('Données lues dans ./src/data.json....');

          const filteredData = jsonData.filter(item => item.uniqueId === uniqueId);

        //   console.log('Données filtrées:', JSON.stringify(filteredData, null, 2));

          if (filteredData.length === 0) {
              console.log(`Aucune entrée trouvée avec l'uniqueId: ${uniqueId}`);
              return res.status(404).send('Aucune donnée trouvée pour cet identifiant unique.');
          }


        //   console.error("filteredData -------- "+filteredData.currentPath)
          // Renvoie les données filtrées
          res.json(filteredData);

      } catch (parseError) {
          console.error('Erreur lors de l\'analyse du JSON:', parseError);
          res.status(500).send('Erreur lors de l\'analyse des données.');
      }
  });
});


app.post('/api/getresults', (req, res) => {
    console.log('/api/getresults');

    const uniqueId = req.headers['x-folder-name'];

    if (!uniqueId) {
        console.log('ID (getresults folder-name) non fourni dans les en-têtes');
        return res.status(400).send('Unique ID is required');
    }

    console.log('ID folder-name:', uniqueId);

    const filePath = path.join(__dirname, '/public/codes/', uniqueId, 'resultats.json');
    console.log("---- filePath == "+filePath)

    fs.readFile(filePath, 'utf8', (err, data) => {
        if (err) {
            console.error('Erreur lors de la lecture du fichier ./src/data.json:', err);
            res.status(500).send('Erreur lors de la lecture des données.');
            return;
        }

        try {
            if (!data.trim()) {
                console.log('Fichier ./src/data.json vide');
                res.json([]);
                return;
            }

            const jsonData = JSON.parse(data);

            if (!Array.isArray(jsonData)) {
                throw new Error('Le contenu de ./src/data.json n\'est pas un tableau');
            }

            //   console.log('Données lues dans ./src/data.json:', JSON.stringify(jsonData, null, 2));
            console.log('Données lues dans ./src/data.json....');

            const filteredData = jsonData.filter(item => item.uniqueId === uniqueId);

            console.log('Données filtrées:', JSON.stringify(filteredData, null, 2));

            if (filteredData.length === 0) {
                console.log(`Aucune entrée trouvée avec l'uniqueId: ${uniqueId}`);
                return res.status(404).send('Aucune donnée trouvée pour cet identifiant unique.');
            }


            //   console.error("filteredData -------- "+filteredData.currentPath)
            // Renvoie les données filtrées
            res.json(filteredData);

        } catch (parseError) {
            console.error('Erreur lors de l\'analyse du JSON:', parseError);
            res.status(500).send('Erreur lors de l\'analyse des données.');
        }
    });
}); /// /api/getresults
  

// Route pour lister uniquement les dossiers dans ./public/codes
app.get('/api/list-codes', (req, res) => {
    const codesDir = path.join(__dirname, 'public', 'codes');

    fs.readdir(codesDir, { withFileTypes: true }, (err, files) => {
        if (err) {
            console.error('Erreur lors de la lecture du dossier :', err);
            return res.status(500).json({ success: false, message: 'Erreur lors de la lecture du dossier' });
        }

        // Filtrer uniquement les dossiers
        const directories = files
            .filter(file => file.isDirectory())
            .map(directory => ({
                name: directory.name,
                path: path.join('public', 'codes', directory.name).replace(/\\/g, '/')
            }));

        res.json({ success: true, directories });
    });
});





app.use(bodyParser.json());

app.post('/api/savefile', (req, res) => {

    console.log("/api/savefile/")
    const { datatos, filepath, fileName, uniqueId_state, saveto } = req.body;
    const fixpagename_html =  (saveto=="direct") ? fileName.replace(".page",".html") : fileName;

    const filepath_fix = path.join(__dirname, '/public/', filepath, "/data/", uniqueId_state+ "_"+ fixpagename_html);
    console.log("saveto == "+saveto)
    console.log(fileName)
    console.log(filepath_fix)
    console.log(fixpagename_html)


    fs.writeFile(filepath_fix, datatos, (err) => {
    if (err) {
    console.error("Error saving file")
        return res.status(500).send('Error saving file');
    }
    res.send('File saved successfully');
    });

});




const PORT = 4000;
app.listen(PORT, () => {
  console.log(`API en écoute sur http://localhost:${PORT}`);
});
