// Chargement des variables d'environnement depuis .env
require('dotenv').config();

// Importation des modules nécessaires
const express = require('express');
const path = require('path');

// Importation des modules personnalisés
const jwtMiddleware = require('./middlewares/jwtMiddleware');
const logger = require('./utils/logger');
const { db } = require('./db/db-connect');
const routes = require('./routes');

// Initialisation de l'application Express
const app = express();

// Configuration du moteur de rendu HTML avec EJS
app.set('view engine', 'ejs');
app.engine('ejs', require('ejs').__express);

// Configuration pour la gestion des corps de requêtes en JSON
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// Middlewares on use
app.use(jwtMiddleware);

// Spécification du dossier contenant les fichiers statiques pour le frontend
app.use(express.static(path.join(process.cwd(), 'public')));

// Initialisation de Materialize CSS pour le frontend
app.use('/materialize', express.static(path.join(process.cwd(), 'public/css/materialize-css/dist')));

app.use('/', routes);

// Middleware pour la gestion des erreurs
app.use((err, req, res, next) => {
  logger.log('error', err.stack);
  res.status(500).send('Quelque chose a mal tourné !');
});

module.exports = app;
