const fs = require("fs");
const https = require("https");
const express = require("express");
const socketio = require("socket.io");
const app = express();

const https_options = {
    key: fs.readFileSync("./privkey.pem"),
    cert: fs.readFileSync("./fullchain.pem"),
    requestCert: false,
    rejectUnauthorized: false
}
const socketHTTPSServer = https.createServer(https_options, app);
const webHTTPSServer = https.createServer(https_options, app);

const io = socketio(socketHTTPSServer, {
    cors: {
        origin: "https://danby.aniere.fr",
    },
    secure: true
});

function getCurrentTime() {
    
    function addZero(i) {
        if (i < 10) {
            i = "0" + i;
        }
        return i;
        }
        
    var d = new Date();
    var h = addZero(d.getHours());
    var m = addZero(d.getMinutes());
    var s = addZero(d.getSeconds());
    return h + ":" + m + ":" + s;
    
};

usersConnected = 0;
lastUsername = 0;

io.on("connection", (client) => {
    
    usersConnected++;
    io.sockets.emit("update-count", {value: usersConnected});
    
    client.on("disconnect", () => {
        usersConnected--;
        io.sockets.emit("update-count", {value: usersConnected});
        console.log(getCurrentTime() + ": Client disconnection (" + client.usernameDenis + ")");
    });

    client.on("message", (data) => {
        if(data.message.toLowerCase().includes("denis")) {
            io.sockets.emit("new-message", {author: client.usernameDenis, message: data.message});
            console.log(getCurrentTime() + ": (" + client.usernameDenis + ") : " + data.message);

        } else {
            client.emit("warning");
            console.log(getCurrentTime() + ": (" + client.usernameDenis + ") : " + data.message + "(invalid)");
        }
    });

    lastUsername++;
    client.usernameDenis = "DenisFan" + lastUsername;
    client.emit("username", {username: "DenisFan" + lastUsername});
    console.log(getCurrentTime() + ": Client connection (" + client.usernameDenis + ")");
    
});  


app.use(express.static("src"));


app.listen(80, () => {
    console.log(getCurrentTime() + ": Web server started on port 80")
});

webHTTPSServer.listen(443, () => {
    console.log(getCurrentTime() + ": Web HTTPS server started on port 443");
});

socketHTTPSServer.listen(3000, () => {
    console.log(getCurrentTime() + ": Socket HTTPS server started on port 3000");
});
