const router = require('express').Router()

const onlines = new Map([
])

const otmetki = new Map()

setInterval(() => {
    [...otmetki.entries()].forEach(([user, otm]) => {
        if (Date.now() - otm > 3500) {
            onlines.set(user, {
                ...(onlines.get(user) || {
                }),
                online: false,
            })
        }
    })
}, 3000)

const mapToObj = (map) => [...map.entries()].reduce((acc, [key, value]) => ({
    ...acc,
    [key]: {
        name: key,
        ...value,
    },
}), {
})

router.post('/enter', (req, res) => {
    const { username } = req.body
    onlines.set(username, {
        ...(onlines.get(username) || {
        }),
        online: true,
    })
    req.session.username = username
    res.send({
    })
})

let syncData = {
    online: mapToObj(onlines),
}

router.get('/events', (req, res) => {
    syncData.online = mapToObj(onlines)
    res.send(syncData)
})

router.post('/set-usr-event', (req, res) => {
    const {
        username,
        userData,
    } = req.body
    onlines.set(username, {
        ...(onlines.get(username) || {
        }),
        data: userData,
    })
    res.send({
    })
})

router.post('/set-bar-event', (req, res) => {
    const { type } = req.body
    syncData.event = type
    syncData.id = Math.random()

    res.send({
    })
})

router.get('/bar/:u', (req, res) => {
    onlines.set(req.params.u, {
        ...(onlines.get(req.params.u) || {
        }),
        online: true,
    })
    syncData.online = mapToObj(onlines)
    // syncData.id = Math.random();
    otmetki.set(req.params.u, Date.now())

    res.send(syncData)
})

router.get('/quit-bar', (req, res) => {
    onlines.set(req.session.username || req.params.u, {
        ...(onlines.get(req.session.username || req.params.u) || {
        }),
        online: false,
    })
    syncData.online = mapToObj(onlines)
    res.send({
    })
})

module.exports = router