const chatBody = document.getElementById('chatBody')
const openButton = document.getElementById('toggleButton')
const chatbotWindow = document.getElementById('chatbotWindow');

let socket
let isFirstWord = false
let botMessage

window.addEventListener('load', adjustChatBodyHeight);
window.addEventListener('resize', adjustChatBodyHeight);

function getTotalHeight(element) {
    const styles = window.getComputedStyle(element);
    const margins = ['marginTop', 'marginBottom', 'borderTopWidth', 'borderBottomWidth']
        .reduce((acc, style) => acc + parseFloat(styles[style]), 0);
    return element.offsetHeight + margins;
}

function adjustChatBodyHeight() {
    const chatFooter = document.getElementById('chatFooter')
    const chatHeader = document.getElementById('chatHeader')
    const chatFooterHeight = getTotalHeight(chatFooter);
    const chatHeaderHeight = getTotalHeight(chatHeader);
    const viewportHeight = window.innerHeight - chatHeaderHeight - chatFooterHeight;
    chatBody.style.height = viewportHeight + 'px';
}

function openChatBotWindow() {
    let lastScrollHeight = chatBody.scrollHeight;
    const uuid = generateUUID()
    socket = new WebSocket(`wss://brestok-javeaai.hf.space/ws/${uuid}`);
    socket.onclose = (event) => console.log('WebSocket disconnected', event);
    socket.onerror = (error) => {
        alert('Something was wrong. Try again later.')
        window.location.reload()
    };
    socket.onmessage = (event) => {
        if (chatBody.scrollHeight > lastScrollHeight) {
            chatBody.scrollTop = chatBody.scrollHeight;
            lastScrollHeight = chatBody.scrollHeight;
        }
        if (!isFirstWord) {
            isFirstWord = true
            createNewMessage(event.data, 'bot')
            const botMessages = document.querySelectorAll('.bot_message');
            botMessage = botMessages[botMessages.length - 1];
        } else {
            const aiMessage = event.data
            if (aiMessage.startsWith('ENRICHED:')) {
                botMessage.innerHTML = aiMessage.substring(9)
                enrichAIResponse(botMessage)
            } else {
                botMessage.innerHTML = marked.parse(aiMessage)
            }
        }
    }
}

function closeChatBotWindow() {
    socket.close()
    chatbotWindow.style.visibility = 'hidden'
    openButton.style.display = 'block'
}

openButton.addEventListener('click', function () {
    chatbotWindow.style.visibility = "visible";
    openButton.style.display = 'none'
    openChatBotWindow();
});