document.addEventListener('DOMContentLoaded', function() { const chatForm = document.getElementById('chat-form'); const messageInput = document.getElementById('message-input'); const userSearchForm = document.getElementById('user-search-form'); const userSearchInput = document.getElementById('user-search-input'); const searchResultsContainer = document.getElementById('search-results'); const conversationListContainer = document.getElementById('conversation-list-container'); const chatBody = document.querySelector('.chat-body'); const chatHeaderName = document.querySelector('.chat-header .name'); const chatHeaderStatus = document.querySelector('.chat-header .status'); let currentConversationId = null; if (chatForm) { chatForm.addEventListener('submit', function(e) { e.preventDefault(); const message = messageInput.value.trim(); if (message && currentConversationId) { sendMessage(currentConversationId, message); } }); } if (userSearchForm) { userSearchForm.addEventListener('submit', function(e) { e.preventDefault(); const searchTerm = userSearchInput.value.trim(); if (searchTerm) { searchUsers(searchTerm); } }); } function searchUsers(term) { fetch(`api.php?action=search_users&term=${term}`) .then(response => response.json()) .then(users => { displaySearchResults(users); }) .catch(error => console.error('Error searching users:', error)); } function displaySearchResults(users) { searchResultsContainer.innerHTML = ''; if (users.length === 0) { searchResultsContainer.innerHTML = '

No users found.

'; return; } users.forEach(user => { const userElement = document.createElement('div'); userElement.classList.add('conversation-item'); userElement.dataset.userId = user.id; userElement.innerHTML = `
${user.username}
`; userElement.addEventListener('click', () => { startConversation(user.id); }); searchResultsContainer.appendChild(userElement); }); } function startConversation(recipientId) { const formData = new FormData(); formData.append('recipient_id', recipientId); fetch('api.php?action=start_conversation', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { if (data.conversation_id) { loadMessages(data.conversation_id); userSearchInput.value = ''; searchResultsContainer.innerHTML = ''; loadConversations(); } else { console.error('Failed to start conversation:', data.error); } }) .catch(error => console.error('Error starting conversation:', error)); } function loadConversations() { fetch('api.php?action=get_conversations') .then(response => response.json()) .then(conversations => { displayConversations(conversations); }) .catch(error => console.error('Error loading conversations:', error)); } function displayConversations(conversations) { conversationListContainer.innerHTML = ''; if (conversations.length === 0) { conversationListContainer.innerHTML = '

No conversations yet.

'; return; } conversations.forEach(conversation => { const conversationElement = document.createElement('div'); conversationElement.classList.add('conversation-item'); conversationElement.dataset.conversationId = conversation.id; conversationElement.dataset.recipientId = conversation.user_id; conversationElement.innerHTML = `
${conversation.username}
`; conversationElement.addEventListener('click', () => { loadMessages(conversation.id, conversation.username); }); conversationListContainer.appendChild(conversationElement); }); } function loadMessages(conversationId, username) { currentConversationId = conversationId; chatHeaderName.textContent = username; chatHeaderStatus.textContent = 'Online'; // Placeholder fetch(`api.php?action=get_messages&conversation_id=${conversationId}`) .then(response => response.json()) .then(messages => { displayMessages(messages); }) .catch(error => console.error('Error loading messages:', error)); } function displayMessages(messages) { chatBody.innerHTML = ''; if (messages.length === 0) { chatBody.innerHTML = '

No messages yet. Say hi!

'; return; } messages.forEach(message => { const messageElement = document.createElement('div'); const isSent = message.sender_id == window.userId; messageElement.classList.add('message', isSent ? 'sent' : 'received'); messageElement.innerHTML = `
${message.message_text}
${new Date(message.created_at).toLocaleTimeString()}
`; chatBody.appendChild(messageElement); }); chatBody.scrollTop = chatBody.scrollHeight; } function sendMessage(conversationId, messageText) { const formData = new FormData(); formData.append('conversation_id', conversationId); formData.append('message_text', messageText); fetch('api.php?action=send_message', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { if (data.success) { messageInput.value = ''; // Add message to UI immediately const messageElement = document.createElement('div'); messageElement.classList.add('message', 'sent'); messageElement.innerHTML = `
${messageText}
Just now
`; chatBody.appendChild(messageElement); chatBody.scrollTop = chatBody.scrollHeight; } else { console.error('Failed to send message:', data.error); } }) .catch(error => console.error('Error sending message:', error)); } // Load conversations on page load loadConversations(); });