import { UnoSockets } from './src/gameLogic/UnoSocket.js'
import express from "express";
import bodyParser from 'body-parser'
import { UnoSession} from './src/gameLogic/UnoSession.js'
import expressWs from 'express-ws';
import http from 'http';
import WebSocket from 'ws';
import { UnoLobby } from './src/lobby/UnoLobby.js';
import { resp } from './src/interface/rest/response.js';
import { watch } from 'fs';


const app = express();
app.use(bodyParser.json())


let unoLobby = new UnoLobby();


app.get('/', (req, res) => res.send('Hello World!'));


//lobby requests
app.get('/unogame/lobbies', (req,res)=>{
    resp(req, res, true, unoLobby.getLobbies(), 200);
})

//lobby requests
app.post('/unogame/create', (req,res)=>{
    resp(req, res, true, {
        id: unoLobby.createLobby(req.body),
    }, 200);
})

//lobby join
app.post('/unogame/join', (req,res)=>{
    let data = unoLobby.joinLobby(req.body.nick,req.body.lid);
    resp(req, res, data[0], data[1], 200);
})



const port = 3000;
const server = app.listen(port, () => console.log(`Example app listening on port ${port}!`));




const wss = new WebSocket.Server({ server });

wss.on('connection', (ws: WebSocket) => {
    console.log("connecting socket...")
    ws.on('message', (message: string) => { actionHandler(message,ws);});
    ws.send('{"msg":"Hello!"}');
});


function actionHandler(message: string, ws: WebSocket){
    try{
        const command = JSON.parse(message);
        console.log(command);
        if (command.action == "register"){
            unoLobby.registerLobby(message,ws)
        }
    }catch(ex){
        ws.send('{"reply":"Error"}');
    }
}

