(function () {
    // FUNCTION TO ADJUST TEXTAREA HEIGHT AND SUBMIT BUTTON VISIBILITY
    function adjustTextAreaAndButton(textarea, submitButton) {
        // Adjust the height of the textarea
        if (textarea.value.trim() === '') {
            textarea.style.height = '50px';
        } else {
            textarea.style.height = textarea.scrollHeight + 'px';
        }

        // Display and hide the submit button
        if (textarea.value.trim() === '') {
            submitButton.classList.add('hidden');
        } else {
            submitButton.classList.remove('hidden');
        }
    }

    function scrollBottom() {
        const conversationContainer = document.getElementById('conversation');
        conversationContainer.scrollTop = conversationContainer.scrollHeight;
    }



    // INITIALIZE ELEMENTS
    const form = document.querySelector('#sendMessage');
    const textarea = document.querySelector('#dynamicTextarea');
    const conversationContainer = document.getElementById('conversation');
    const submitButton = document.getElementById('submitMessageButton');
    let typingTimeout;
    let isTyping = false;


    // EVENT LISTENERS
    textarea.addEventListener('input', function () {
        // Adjust textarea and button
        adjustTextAreaAndButton(dynamicTextarea, submitButton);
    
        if (!isTyping) {
            osichatSocket.send(JSON.stringify({ 
                'event_type': 'typing', 
                'typing_status': 'typing' 
            }));
            isTyping = true;
        }

        clearTimeout(typingTimeout);
        typingTimeout = setTimeout(function() {
            osichatSocket.send(JSON.stringify({ 
                'event_type': 'typing', 
                'typing_status': 'stopped_typing' 
            }));
            isTyping = false;
        }, 3000); 
    });


    form.addEventListener('submit', (event) => {
        textarea.style.height = '50px';
        submitButton.classList.add('hidden');

        setTimeout(() => {
            scrollBottom();
        }, 100);
    });

    textarea.addEventListener('keydown', (event) => {
        if (event.key === 'Enter' && !event.shiftKey) {
            event.preventDefault();
            if (!submitButton.classList.contains('hidden')) {
                submitButton.click();
            }
            scrollBottom();
        }
    });

})();
