/////////////////////////////////////////////////
// LOGGING
/////////////////////////////////////////////////
const logger = require("./public/js/app/logger");

logger.info('bonjour Julie');

/////////////////////////////////////////////////
// VARIABLES D'ENVIRONNEMENT
/////////////////////////////////////////////////

// DOTENV
// Ne pas utiliser de fichiers .env dans votre environnement de production, 
// mais définir plutôt les valeurs d'environnement sur l'hébergeur 
require('dotenv').config();
logger.info('process.env.PORT : ' + process.env.PORT);

/////////////////////////////////////////////////
// APPELS DES MODULES
/////////////////////////////////////////////////

// EXPRESS
const express = require('express');

// EXPRESS-SESSION
const session = require('express-session');

// BODY-PARSER
//Le package body-parser permet de décomposer les requêtes HTTP POST, PATCH, etc. afin de pouvoir extraire les infoirmations tranmises dans des formulaires. Ces informations apparaissent dans le champ req.body.
const bodyparser = require('body-parser');

/////////////////////////////////////////////////
// MIDDLEWARE
// INITIALISER LES MODULES DANS LE PROJET APP
/////////////////////////////////////////////////

// EXPRESS
//// "app" étant la variable qui désigne le projet
const app = express();

// EXPRESS-SESSION
var session_cookie = {
    secret: process.env.COOKIE_SECRET,
    resave: false,
    saveUninitialized: false,
    cookie: {}
}

logger.info("process.env.ENV : " + process.env.ENV);
if (process.env.ENV === 'production') {
    logger.info("express-session secured");
    app.set('trust proxy', 1); // trust first proxy
    session_cookie.cookie.secure = true; // serve secure cookies
}

app.use(session(session_cookie))

// JSON
//// Read datas on API
//// needed by Express  to read post from HTML Form
// not for STRIPE WEBHOOK
app.use('/wh_stripe', express.raw({ type: 'application/json' }));
// for the others
app.use(express.json());

// BODY-PARSER
//// Pour récupérer les saisies des formulaires des pages via express (req.body)
app.use(bodyparser.urlencoded({ extended: true}));
app.use(bodyparser.json());



/////////////////////////////////////////////////
// PORT D'ÉCOUTE WEB
/////////////////////////////////////////////////

// port dans variable d'environnement OU (||) par défaut 8888
const port = process.env.PORT;
app.listen(port);

/////////////////////////////////////////////////
// MOTEUR DE TEMPLATE HTML
/////////////////////////////////////////////////

// appeler le moteur de template html ejs
app.set('view engine', 'ejs');
// le répertoire dans lequel se trouvent les fichiers modèles
app.set('views', './views')

/////////////////////////////////////////////////
// ASSETS (de Express)
/////////////////////////////////////////////////
// donner au programme le nom du dossier où sont les assets (css, image...)
// Le chemin d’accès que vous fournissez à la fonction express.static est en rapport 
// avec le répertoire à partir duquel vous lancez votre processus node. 
// Si vous exécutez l’application express à partir d’un autre répertoire, 
// il est plus sûr d’utiliser le chemin d’accès absolu que vous voulez servir
// ex : DOMAIN/assets/images/kitten.jpg
app.use('/public', express.static('public'));

/////////////////////////////////////////////////
// ROUTES
/////////////////////////////////////////////////

const appRouter = require("./routes/appRouter");
const adhesionRouter = require("./routes/adhesionRouter");
const stagenatRouter = require("./routes/stagenatRouter");
const rassemblementRouter = require("./routes/rassemblementRouter");
const rassemblementraRouter = require("./routes/rassemblementraRouter");
const concertRouter = require("./routes/concertRouter");
const donRouter = require("./routes/donRouter");
const ventevideoRouter = require("./routes/ventevideoRouter");
const wuzukiRouter = require("./routes/wuzukiRouter");

// Accueil du site
// [DOMAIN]/
app.use("/", appRouter);


// Adhésion
// [DOMAIN]/adhésion
app.use("/adhesion", adhesionRouter);

// STAGE NATIONAL
// [DOMAIN]/stagenational
app.use("/stagenational", stagenatRouter);

// RASSEMBLEMENT IDF
// [DOMAIN]/rassemblementidf
app.use("/rassemblementidf", rassemblementRouter);

// RASSEMBLEMENT IDF
// [DOMAIN]/rassemblementidf
app.use("/rassemblementra", rassemblementraRouter);

// CONCERT ANNUEL
// [DOMAIN]/concert
app.use("/concert", concertRouter);

// DON
// [DOMAIN]/don
app.use("/don", donRouter);

// VENTE VIDEO
// [DOMAIN]/boutique
app.use("/boutique", ventevideoRouter);

// WUZUKI
// [DOMAIN]/wuzuki
app.use("/wuzuki", wuzukiRouter);