// jsonPost с fetch и async
async function jsonPost(url, data) {
    let response = await fetch(url, {
            method: 'POST', 
            body: JSON.stringify(data),
        })
    if (response.status == 200) {
        return response.json()
    } else if (response.status != 200) {
        return new Error('status is not 200')
    }
}

// function jsonPost(url, data)
// {
//     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'))
//             }
//         }
//     })
// }

function addMessage(messageObj) {
    message = messageTemplate.content.cloneNode(true)
    message.querySelector('.nickname').textContent = messageObj.nick
    message.querySelector('.message-text').textContent = messageObj.message
    message.querySelector('.time').textContent = (new Date(messageObj.timestamp)).toString().slice(4, 24)
    messagesArea.append(message)
}

//отэто всё на then
// send.onclick = () => {
//     if(nickname.value !== '' && messageText.value !== '')
//     jsonPost("http://students.a-level.com.ua:10012", {func: 'addMessage', nick: nickname.value, message: messageText.value})
//     .then(() => {
//         nickname.value = ''
//         messageText.value = ''
//     })
// }

// let savedId
// jsonPost("http://students.a-level.com.ua:10012", {func: "getMessages", messageId: 0})
// .then(({data, nextMessageId}) => {
//     savedId = nextMessageId
//     for (let message of data) {
//         addMessage(message)
//     }
// })

// setInterval(() => {
//     console.log(savedId)
//     jsonPost("http://students.a-level.com.ua:10012", {func: "getMessages", messageId: savedId})
//     .then(({data, nextMessageId}) => {
//         savedId = nextMessageId
//         if (data.length > 0) {
//             for (let message of data) {
//                 addMessage(message)
//             }   
//         }
//     })
// }, 5000)

//отэто всё с async
let delay = (ms) => new Promise((fulfill) => setTimeout(() => fulfill(ms), ms))

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

async function getMessages(messageId) {
    let {data, nextMessageId} = await jsonPost("http://students.a-level.com.ua:10012", {func: "getMessages", messageId})
    for (let message of data) addMessage(message)
    savedId = nextMessageId
}

async function sendAndCheck() {
    await sendMessage(nickname.value, messageText.value)
    messageText.value = ''
    await getMessages(savedId)
}

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

let savedId = 0
getMessages(savedId)
send.onclick = sendAndCheck
checkLoop()