let conversation = [ { role: 'bot', message: 'Hi there! I\'m Chef Bot! May I know your name?' } ]; let selectedMenuItems = []; function addMessage(role, message) { const chatMessages = document.getElementById('chatMessages'); if (!chatMessages) { console.error('Chat messages container not found!'); return; } const messageDiv = document.createElement('div'); messageDiv.className = role === 'bot' ? 'bot-message' : 'user-message'; messageDiv.textContent = message; chatMessages.appendChild(messageDiv); chatMessages.scrollTop = chatMessages.scrollHeight; console.log(`Added ${role} message: ${message}`); } function sendMessage() { const userInput = document.getElementById('userInput'); if (!userInput) { console.error('User input field not found!'); return; } const message = userInput.value.trim(); if (message) { addMessage('user', message); conversation.push({ role: 'user', message: message }); userInput.value = ''; setTimeout(() => handleResponse(message), 500); } else { console.warn('Empty message!'); } } function handleResponse(userInput) { const lastMessage = conversation[conversation.length - 1].message.toLowerCase(); let botResponse = ''; let options = []; if (conversation.length === 2) { // After name input botResponse = `Nice to meet you, ${userInput}! 😊 Let's create your perfect meal! What type of food would you prefer?`; options = [ { text: 'Vegetarian', class: 'green' }, { text: 'Non-Vegetarian', class: 'red' }, { text: 'Both', class: 'gray' } ]; } else if (lastMessage.includes('vegetarian') || lastMessage.includes('non-vegetarian') || lastMessage.includes('both')) { botResponse = `Great choice! 🍽️ These are the available menu items for ${lastMessage}:`; fetchMenuItems(lastMessage); return; } addMessage('bot', botResponse); if (options.length > 0) { displayOptions(options); } } function fetchMenuItems(dietaryPreference) { fetch('/get_menu_items', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ dietary_preference: dietaryPreference }) }) .then(response => response.json()) .then(data => { if (data.error) { addMessage('bot', `Sorry, there was an error fetching menu items: ${data.error}`); } else { const menuItems = data.menu_items || []; addMessage('bot', 'Great choice! These are available menu items:'); displayMenuItemsList(menuItems); displaySelectedMenuItems(); console.log(`Menu items fetched for ${dietaryPreference}:`, menuItems); } }) .catch(error => { addMessage('bot', `Error: Unable to connect to the menu database. ${error.message}`); }); } function displayMenuItemsList(menuItems) { const chatMessages = document.getElementById('chatMessages'); if (!chatMessages) { console.error('Chat messages container not found for menu items!'); return; } let menuItemsList = document.querySelector('.menu-items-list'); if (!menuItemsList) { menuItemsList = document.createElement('div'); menuItemsList.className = 'menu-items-list'; chatMessages.appendChild(menuItemsList); } else { menuItemsList.innerHTML = ''; } menuItems.forEach(menuItem => { const item = document.createElement('div'); item.className = 'menu-item-item'; const img = document.createElement('img'); img.src = menuItem.image_url || 'https://via.placeholder.com/80'; img.alt = menuItem.name; const name = document.createElement('div'); name.textContent = menuItem.name; name.style.textAlign = 'center'; name.style.marginTop = '5px'; name.style.fontSize = '12px'; const button = document.createElement('button'); button.textContent = 'Add'; button.onclick = () => { if (!selectedMenuItems.some(item => item.name === menuItem.name)) { selectedMenuItems.push(menuItem); displaySelectedMenuItems(); } }; item.appendChild(img); item.appendChild(name); item.appendChild(button); menuItemsList.appendChild(item); }); } function displaySelectedMenuItems() { const chatMessages = document.getElementById('chatMessages'); if (!chatMessages) { console.error('Chat messages container not found for selected menu items!'); return; } let selectedArea = document.querySelector('.selected-menu-items'); if (!selectedArea) { selectedArea = document.createElement('div'); selectedArea.className = 'selected-menu-items'; chatMessages.appendChild(selectedArea); } else { selectedArea.innerHTML = ''; } selectedMenuItems.forEach(menuItem => { const div = document.createElement('div'); div.textContent = menuItem.name; selectedArea.appendChild(div); }); } function displayOptions(options) { const chatMessages = document.getElementById('chatMessages'); if (!chatMessages) { console.error('Chat messages container not found for options!'); return; } // Clear existing content chatMessages.innerHTML = ''; options.forEach(opt => { const button = document.createElement('button'); button.textContent = opt.text; button.className = `option-button ${opt.class}`; button.onclick = () => { addMessage('user', opt.text); conversation.push({ role: 'user', message: opt.text }); handleResponse(opt.text); // Process the selection immediately }; chatMessages.appendChild(button); }); chatMessages.appendChild(document.createElement('br')); const backButton = document.createElement('button'); backButton.textContent = 'Go Back'; backButton.className = 'option-button'; backButton.onclick = () => { // Reset conversation to initial state const userName = conversation.length > 1 ? conversation[1].message : 'User'; conversation = [{ role: 'bot', message: `Hi there! I'm Chef Bot! May I know your name?` }, { role: 'user', message: userName }, { role: 'bot', message: `Nice to meet you, ${userName}! 😊 Let's create your perfect meal! What type of food would you prefer?` }]; selectedMenuItems = []; chatMessages.innerHTML = ''; conversation.forEach(msg => addMessage(msg.role, msg.message)); displayOptions([ { text: 'Vegetarian', class: 'green' }, { text: 'Non-Vegetarian', class: 'red' }, { text: 'Both', class: 'gray' } ]); }; chatMessages.appendChild(backButton); } // Add event listener for Enter key document.getElementById('userInput').addEventListener('keypress', function(e) { if (e.key === 'Enter') { sendMessage(); } }); // Initial load check console.log('Script loaded successfully');