<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>



</head>

<body>

    <div id="container" style="margin: 0 auto; color: red; font-size: 26px; width:400px; background-color: black; ">
        <input type="text" id="name" placeholder="name"
            style="width: 39%; padding: 12px 20px; background-color: black; color: red; font-size: 16px;">
        <input type="text" id="msg" placeholder="message"
            style="width: 39%; float: right; padding: 12px 20px; background-color: black; color: red; font-size: 16px;">
        <button id="send"
            style="width: 100%; display: block; padding: 12px 20px; margin: 0 auto; background-color: black; color: red; font-size: 16px;">Send</button>

        <div id="chat" style="margin: 20px"></div>
    </div>

    <script>

        async function jsonPost(url = '', data = {}) {

            const response = await fetch(url, {
                method: 'POST',
                body: JSON.stringify(data)
            })
            return await response.json()
        }

        // return new Promise((resolve, reject) => {
        //     var x = new XMLHttpRequest();
        //     x.onerror = () => reject(new Error('jsonPost failed'))
        //     //x.setRequestHeader('Content-Type', 'application/json');
        //     x.open("POST", url, true);
        //     x.send(JSON.stringify(data))

        //     x.onreadystatechange = () => {
        //         if (x.readyState == XMLHttpRequest.DONE && x.status == 200) {
        //             resolve(JSON.parse(x.responseText))
        //         }
        //         else if (x.status != 200) {
        //             reject(new Error('status is not 200'))
        //         }
        //     }
        // })


        async function sendMessage(nick, message) {
            await jsonPost("http://students.a-level.com.ua:10012", { func: 'addMessage', nick: nick, message: message })
            getMessages()
        }

        let inputName = document.getElementById("name")
        let inputMessage = document.getElementById("msg")
        let buttonSend = document.getElementById("send")

        buttonSend.onclick = () => sendMessage(inputName.value, inputMessage.value)

        function showChat(data) {
            let div = document.getElementById('chat')
            for (let key in data.data) {

                let divMessage = document.createElement('div')

                divMessage.innerText = `${data.data[key].nick} : ${data.data[key].message}`
                divMessage.style.borderBottom = "2px solid red"

                div.prepend(divMessage)

                let time = document.createElement('div')
                time.innerText = `${new Date(data.data[key].timestamp).toLocaleString()}`
                time.style.fontSize = "12px"

                divMessage.appendChild(time)

            }
        }

        let nextMessageId = 0
        async function getMessages() {
            let data = await jsonPost("http://students.a-level.com.ua:10012", { func: 'getMessages', messageId: nextMessageId })
            showChat(data)
            nextMessageId = data.nextMessageId
        }

        const delay = ms => new Promise(ok => {
            setTimeout(() => ok(ms), ms)
        })

        async function checkLoop() {
            while (true) {
                getMessages()
                await delay(2000)
            }
        }

        checkLoop()
    </script>

</body>

</html>