const { Socket } = require('socket.io');

const express = require('express');

const app = express();
const http = require('http').createServer(app);
const path = require('path');
const port = 8060;

const io = require('socket.io')(http);

app.use('/bootstrap/css', express.static(path.join(__dirname, 'node_modules/bootstrap/dist/css')));
app.use('/bootstrap/js', express.static(path.join(__dirname, 'node_modules/bootstrap/dist/js')));
app.use('/jquery', express.static(path.join(__dirname, 'node_modules/jquery/dist')));



app.get('/', (req, res) => {
    res.sendFile(path.join(__dirname, 'htdocs/page_acceuil2.html'));
});
app.use(express.static(path.join(__dirname, 'htdocs')));
app.get('/',(req,res)=>{
    res.sendFile(path.join(__dirname,'htdocs/page_jeu.html'));
});

http.listen(port , ()=>{
    console.log("Listening on http://localhost${port}/");
});
let rooms = [];
io.on('connection', (socket) => {
    console.log(`[connection] ${socket.id}`);

    socket.on('playerData', (player) => {
        console.log(`[playerData] ${player.username}`);

        let room = null;

        if (!player.roomId) {
            room = createRoom(player);
            console.log(`[create room ] - ${room.id} - ${player.username}`);
        } else {
            room = rooms.find(r => r.id === player.roomId);

            if (room === undefined) {
                return;
            }

            player.roomId = room.id;
            room.players.push(player);
        }

        socket.join(room.id);

        io.to(socket.id).emit('join room', room.id);

        if (room.players.length === 2) {
            io.to(room.id).emit('start game', room.players);
        }
    });

    socket.on('get rooms', () => {
        io.to(socket.id).emit('list rooms', rooms);
    });
    socket.on('play', (data) => {
        console.log(`[Server] Play reçu : ${JSON.stringify(data)}`);  // Debugging

        socket.broadcast.emit('play', data);  // On diffuse à tous les clients
    });
    socket.on('roque', (data) => {
        console.log(`[Server] Play reçu : ${JSON.stringify(data)}`);  // Debugging

<<<<<<< Updated upstream
    socket.on('echec', () => {
        socket.broadcast.emit('echec');
    });
=======
        socket.broadcast.emit('roque', data);  // On diffuse à tous les clients
    });

>>>>>>> Stashed changes
    socket.on('play again', (roomId) => {
        const room = rooms.find(r => r.id === roomId);

        if (room && room.players.length === 2) {
            io.to(room.id).emit('play again', room.players);
        }
    })

    socket.on('disconnect', () => {
        console.log(`[disconnect] ${socket.id}`);
        let room = null;

        rooms.forEach(r => {
            r.players.forEach(p => {
                if (p.socketId === socket.id && p.host) {
                    room = r;
                    rooms = rooms.filter(r => r !== room);
                }
            })
        })
    });
});

function createRoom(player) {
    const room = { id: roomId(), players: [] };

    player.roomId = room.id;

    room.players.push(player);
    rooms.push(room);

    return room;
}

function roomId() {
    return Math.random().toString(36).substr(2, 9);
}