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

module.exports = chatRouter

const { getChatFromDB, getUsersChats, addChatToDB, getUserFromDB,
    addMessageToChat} = require('../db')

chatRouter.get('/item/:id1/:id2', (req, res) => {
    const { id1, id2 } = req.params

    if (id1 === id2) {
        res.status(400).send({message: 'Ids should be different'})
        return
    }

    const chat = getChatFromDB(id1, id2)

    if (chat) {
        res.status(200).send({chat})
    } else {
        res.status(404).send({message: 'Chat was not found'})
    }
})

chatRouter.post('/item/:id1/:id2', (req, res) => {
    const { id1, id2 } = req.params

    if (id1 === id2) {
        res.status(400).send({message: 'Ids should be different'})
        return
    }

    const chat = getChatFromDB(id1, id2)

    if (chat) {
        // Chat already exists
        res.status(200).send({chat})
    } else {
        if (!getUserFromDB(id1) || !getUserFromDB(id2)) {
            res.status(404).send({message: 'Such interlocutor does not exist'})
        } else {
            // Creating new chat
            const newChat = {
                id1: id1,
                id2: id2,
                messages: []
            }

            addChatToDB(newChat)

            res.status(200).send({newChat})
        }
    }
})

chatRouter.get('/list/:id', (req, res) => {
    const { id } = req.params

    const userChats = getUsersChats(id)

    if (!userChats) {
        res.status(404).send({message: 'Error with retrieving chats'})
    } else {
        res.status(200).send({chats: userChats})
    }
})

chatRouter.post('/message/:sender/:receiver', (req, res) => {
    const { sender, receiver } = req.params
    const { message } = req.body

    const chat = getChatFromDB(sender, receiver)

    if (!chat) {
        // Chat already exists
        res.status(400).send({message: "Such chat does not exist"})
    } else {
        if (!getUserFromDB(sender) || !getUserFromDB(receiver)) {
            res.status(404).send({message: 'Such people do not exist'})
        } else {
            // Add new message
            addMessageToChat(chat, message)
            res.status(200).send({})
        }
    }
})