// WEBSITE.JS : Gestion du site web

// Modules extérieurs
var app = require('express')();

// Modules propres
var bot = require('./telegram');
var { getChanByState } = require('./mysql');
var { getFirstToken } = require('./requests');

// Configurations
const config = require('./config');



// Lancement du site
app.listen(config.website.port, '127.0.0.1', () => {
    console.log(`[express] Website is up and accessible on ${config.website.protocol}://${config.website.hostname}/`);
})


// Page de base, si argument 
app.get('/', function (req, res) {

    // GET / : renvoie la page de base
    if (!req.query.state) return res.sendFile(`${__dirname}/index.html`);
    // surement une tentative de XSS (plus gros point d'entrée)
    if (req.query.state.indexOf(';') !== -1) return res.sendFile(`${__dirname}/index.html`);

    getChanByState(req.query.state).then(chan => {

        if (!chan || chan.token) return res.sendFile(`${__dirname}/index.html`);

        const redirectURI = `${config.website.protocol}://${config.website.hostname}/auth`;
        const url = `https://auth.viarezo.fr/oauth/authorize/?redirect_uri=${redirectURI}&client_id=${config.oauth2.clientid}&response_type=code&state=${chan.state}&scope=${config.oauth2.scope}`;
        return res.redirect(301, url);
    })

})

app.get('/background.jpg', function (req, res) {
    res.sendFile(`${__dirname}/background.jpg`)
})


app.get('/auth', function (req, res) {

    if (!req.query.code || !req.query.state) return res.sendFile(`${__dirname}/auth.html`)

return getFirstToken(req.query.code, req.query.state).then(chan => {
        bot.sendMessage(chan.chatId, `@${chan.username} s'est connecté à OAuth2, shall we begin?\nFaites /search XXX pour chercher une composition sur linkCS et ajouter ses membres à votre liste d'anniversaire.`)
        res.redirect(301, `${config.website.protocol}://${config.website.hostname}/auth`)
    })
})

app.get('/namebot', function (req, res) {
    return res.send(config.telegram.name);
})

module.exports = app;