// =========================================================================
// ARCHIVO: chatbot.js
// DESCRIPCIÓN: Asistente Karu con retorno automático al menú tras calificar
// =========================================================================

let chatWidget = null;
let chatBody = null;
let chatOptions = null;
let currentStep = 'start'; 
let voiceEnabled = false;

document.addEventListener("DOMContentLoaded", () => {
    chatWidget = document.getElementById('chatWidget');
    chatBody = document.getElementById('chatBody');
    chatOptions = document.getElementById('chatOptions');
});

// --- LISTA DE OPCIONES DE RESTAURANTES (REUTILIZABLE) ---
// Definimos esto aquí para usarlo tanto en el menú principal como al regresar de calificar
const restaurantOptions = [
    { text: '🌟 Hexágono Restaurante contemporáneo...', next: 'desc_hexagono', restaurantId: 1 },
    { text: '🔥 Parrillero Cotohurco Auténtica parrilla...', next: 'desc_parrillero', restaurantId: 2 },
    { text: '🛣️ Ruta 66 Bar y restaurante...', next: 'desc_ruta66', restaurantId: 3 },
    { text: '🍽️ Sin Reserva EC Restaurante de cocina creativa...', next: 'desc_sinreserva', restaurantId: 4 },
    { text: '🍗 Movie Wings Bar temático de cine...', next: 'desc_moviewings', restaurantId: 8 },
    { text: '🌶️ Ají de piedra Restaurante especializado...', next: 'desc_ajipiedra', restaurantId: 6 },
    { text: '🍴 Restaurante "El Monarca" Cocina tradicional...', next: 'desc_monarca', restaurantId: 5 }
];

// --- BASE DE CONOCIMIENTO (CHAT FLOW) ---
const chatFlow = {
    'start': {
        message: [
            '¡Hola! 👋 Bienvenido a Karu. Estoy aquí para ayudarte a descubrir nuestros deliciosos platos. ¿En qué puedo asistirte hoy?',
            '¡Hola, foodie! 🍽️ Soy Karu. Si buscas recomendaciones o información sobre nuestro menú, ¡estoy aquí para ayudarte!',
            '¡Bienvenido! 🎉 Soy Karu y estoy aquí para hacer que tu experiencia sea deliciosa. ¿Por dónde te gustaría empezar?'
        ],
        options: [
            { text: 'Ver lista de Restaurantes', next: 'menu_principal' }
        ]
    },
    'menu_principal': {
        message: [
            'Descubre la gran variedad de sabores que la parroquia de Yaruquí tiene para ofrecer. 🍽️ Con 7 increíbles restaurantes a tu disposición...',
            '✨ Explora nuestros menús contando con 7 restaurantes, descubre las especialidades de cada lugar y déjate sorprender por las delicias que te esperan.'
        ],
        options: restaurantOptions // Usamos la lista constante definida arriba
    },

    // --- NUEVO PASO: RETORNO DESPUÉS DE CALIFICAR ---
    'post_rating': {
        message: '¡Muchas gracias por tu calificación! ⭐ Tu opinión nos ayuda a mejorar. ¿Te gustaría explorar otro restaurante?',
        options: restaurantOptions // Volvemos a mostrar la lista
    },

    // --- BLOQUES DE RESTAURANTES ---
    // NOTA: En todos los bloques 'rec_*', cambiamos next: 'end_chat' por next: 'post_rating'

    // 1. Hexágono
    'desc_hexagono': {
        message: '🎉 ¡Excelente elección! 🎉Hexágono 🌟 ¡Déjate cautivar por la cocina contemporánea de Hexágono!',
        options: [ { text: '✨ Ver Recomendación', next: 'rec_hexagono' }, { text: '🔙 Volver al menú', next: 'menu_principal' } ]
    },
    'rec_hexagono': {
        message: [ '✨ Opción: Hamburguesa Hexaburger + Cerveza Pilsener.' ],
        options: [ 
            { text: '🔙 Volver al menú', next: 'menu_principal' }, 
            { text: '⭐ Finalizar y Calificar', action: 'rate_restaurant', restaurantId: 1, restaurantName: 'Hexágono', next: 'post_rating' } 
        ]
    },

    // 2. Parrillero Cotohurco
    'desc_parrillero': {
        message: '🔥 ¡Gran elección! El Parrillero Cotohurco ofrece auténtica parrilla ecuatoriana en un ambiente rústico.',
        options: [ { text: '✨ Ver Recomendación', next: 'rec_parrillero' }, { text: '🔙 Volver al menú', next: 'menu_principal' } ]
    },
    'rec_parrillero': {
        message: [ '✨ Opción recomendada: Parrillada Completa con papas chauchas y salsa verde.' ],
        options: [ 
            { text: '🔙 Volver al menú', next: 'menu_principal' }, 
            { text: '⭐ Finalizar y Calificar', action: 'rate_restaurant', restaurantId: 2, restaurantName: 'Parrillero Cotohurco', next: 'post_rating' } 
        ]
    },

    // 3. Ruta 66
    'desc_ruta66': {
        message: '🛣️ ¡Estilo americano! Ruta 66 es ideal para disfrutar hamburguesas gigantes y un ambiente de rock.',
        options: [ { text: '✨ Ver Recomendación', next: 'rec_ruta66' }, { text: '🔙 Volver al menú', next: 'menu_principal' } ]
    },
    'rec_ruta66': {
        message: [ '✨ Opción recomendada: La Monster Burger Challenge (¡solo para valientes!).' ],
        options: [ 
            { text: '🔙 Volver al menú', next: 'menu_principal' }, 
            { text: '⭐ Finalizar y Calificar', action: 'rate_restaurant', restaurantId: 3, restaurantName: 'Ruta 66', next: 'post_rating' } 
        ]
    },

    // 4. Sin Reserva EC
    'desc_sinreserva': {
        message: '🍽️ ¡Creatividad pura! Sin Reserva EC mezcla mariscos frescos con técnicas modernas.',
        options: [ { text: '✨ Ver Recomendación', next: 'rec_sinreserva' }, { text: '🔙 Volver al menú', next: 'menu_principal' } ]
    },
    'rec_sinreserva': {
        message: [ '✨ Opción recomendada: Picada del Pacífico con camarones y dedos de pescado.' ],
        options: [ 
            { text: '🔙 Volver al menú', next: 'menu_principal' }, 
            { text: '⭐ Finalizar y Calificar', action: 'rate_restaurant', restaurantId: 4, restaurantName: 'Sin Reserva EC', next: 'post_rating' } 
        ]
    },

    // 5. El Monarca
    'desc_monarca': {
        message: '🍴 ¡Sabor tradicional! El Monarca te trae lo mejor de la cocina ecuatoriana casera.',
        options: [ { text: '✨ Ver Recomendación', next: 'rec_monarca' }, { text: '🔙 Volver al menú', next: 'menu_principal' } ]
    },
    'rec_monarca': {
        message: [ '✨ Opción recomendada: Seco de Chivo con arroz amarillo y maduro.' ],
        options: [ 
            { text: '🔙 Volver al menú', next: 'menu_principal' }, 
            { text: '⭐ Finalizar y Calificar', action: 'rate_restaurant', restaurantId: 5, restaurantName: 'El Monarca', next: 'post_rating' } 
        ]
    },

    // 6. Ají de Piedra
    'desc_ajipiedra': {
        message: '🌶️ ¡Toque picante! Ají de Piedra se especializa en sabores intensos y tradicionales.',
        options: [ { text: '✨ Ver Recomendación', next: 'rec_ajipiedra' }, { text: '🔙 Volver al menú', next: 'menu_principal' } ]
    },
    'rec_ajipiedra': {
        message: [ '✨ Opción recomendada: Pollo al Diablo marinado en salsa picante.' ],
        options: [ 
            { text: '🔙 Volver al menú', next: 'menu_principal' }, 
            { text: '⭐ Finalizar y Calificar', action: 'rate_restaurant', restaurantId: 6, restaurantName: 'Ají de piedra', next: 'post_rating' } 
        ]
    },

    // 8. Movie Wings
    'desc_moviewings': {
        message: '🍗 ¡Luces, cámara, acción! Movie Wings es un bar temático de cine con alitas increíbles.',
        options: [ { text: '✨ Ver Recomendación', next: 'rec_moviewings' }, { text: '🔙 Volver al menú', next: 'menu_principal' } ]
    },
    'rec_moviewings': {
        message: [ '✨ Opción recomendada: Alitas Western con salsa BBQ ahumada.' ],
        options: [ 
            { text: '🔙 Volver al menú', next: 'menu_principal' }, 
            { text: '⭐ Finalizar y Calificar', action: 'rate_restaurant', restaurantId: 8, restaurantName: 'Movie Wings', next: 'post_rating' } 
        ]
    },
    
    // --- FLUJO GENÉRICO ---
    'ask_rating': {
        message: '¡Gracias por usar Karu! Esperamos verte pronto.',
        options: [ { text: 'Cerrar chat', next: 'end_chat' } ]
    },
    'end_chat': {
        message: '¡Muchas gracias! Esperamos verte pronto. 👋',
        options: [] 
    }
};

// --- FUNCIÓN DE NOTIFICACIÓN ---
function showContextToast(message) {
    let toast = document.getElementById('globalToast');
    if (!toast) {
        toast = document.createElement('div');
        toast.id = 'globalToast';
        toast.className = 'context-toast';
        document.body.appendChild(toast);
    }
    toast.innerHTML = `<i class="fas fa-bell"></i> ${message}`;
    toast.classList.add('show');
    setTimeout(() => { toast.classList.remove('show'); }, 3000);
}

// --- ACTUALIZAR HEADER ---
function updateHeaderContext(restaurantId) {
    const headerTitle = document.querySelector('.chat-header span'); 
    const header = document.querySelector('.chat-header');
    
    if (!headerTitle || !header) return;

    let restaurant = null;
    if (typeof restaurants !== 'undefined' && restaurantId) {
        restaurant = restaurants.find(r => r.id === restaurantId);
    }

    if (restaurant) {
        header.classList.add('restaurant-mode');
        headerTitle.innerHTML = `<i class="fas fa-utensils"></i> ${restaurant.name}`;
        showContextToast(`Conectado con: ${restaurant.name}`);
    } else {
        header.classList.remove('restaurant-mode');
        headerTitle.innerHTML = 'Asistente Karu'; 
    }
}

// --- MINIMIZAR CON EFECTO VISUAL ---
function minimizeChatWithEffect() {
    if (!chatWidget) return;

    // 1. Ocultar el chat
    chatWidget.classList.remove('active');

    // 2. Animar el botón para llamar la atención
    const toggleBtn = document.getElementById('chatToggle');
    if (toggleBtn) {
        toggleBtn.classList.remove('attention'); // Reset
        setTimeout(() => { toggleBtn.classList.add('attention'); }, 50);
        setTimeout(() => { toggleBtn.classList.remove('attention'); }, 5000);
    }
}

// --- LÓGICA PRINCIPAL ---

function toggleChat() {
    if (!chatWidget) return;
    
    // Quitar animación al abrir
    const toggleBtn = document.getElementById('chatToggle');
    if (toggleBtn) toggleBtn.classList.remove('attention');

    chatWidget.classList.toggle('active');
    
    if (chatWidget.classList.contains('active') && chatBody && chatBody.children.length === 0) {
        renderStep('start');
    }
}

function renderStep(stepId) {
    const step = chatFlow[stepId];
    if (!step) return;

    currentStep = stepId;
    let messageText = step.message;
    if (Array.isArray(step.message)) {
        const randomIndex = Math.floor(Math.random() * step.message.length);
        messageText = step.message[randomIndex];
    }

    addMessage(messageText, 'incoming');
    
    if (chatOptions) {
        chatOptions.innerHTML = '';
        if (step.options && step.options.length > 0) {
            step.options.forEach(option => {
                const button = document.createElement('button');
                button.classList.add('option-button');
                button.textContent = option.text;
                button.onclick = () => handleOptionClick(option);
                chatOptions.appendChild(button);
            });
        } else {
            chatOptions.innerHTML = '<div class="no-options">Fin de la conversación.</div>';
        }
    }
}

function handleOptionClick(option) {
    addMessage(option.text, 'outgoing');
    if (chatOptions) chatOptions.innerHTML = '';

    // 1. Contexto y APERTURA DE MODAL + MINIMIZAR
    if (option.restaurantId && option.action !== 'rate_restaurant') {
        updateHeaderContext(option.restaurantId);
        
        if (typeof openRestaurantModal === 'function') {
            openRestaurantModal(option.restaurantId);
            // Efecto de minimizar automático al abrir el menú
            setTimeout(() => { minimizeChatWithEffect(); }, 500);
        }
    } 
    else if (option.next === 'menu_principal') {
        updateHeaderContext(null); 
        showContextToast("Regresando al Menú Principal");
        if (typeof closeModal === 'function') closeModal();
    }
    
    // 2. Efecto visual de escritura
    if (chatBody) {
        chatBody.classList.remove('transitioning');
        void chatBody.offsetWidth;
        chatBody.classList.add('transitioning');
    }

    const typingIndicator = document.createElement('div');
    typingIndicator.className = 'typing-indicator';
    typingIndicator.innerText = (option.restaurantId && !option.action) ? 'Abriendo menú...' : 'Karu está escribiendo...';
    typingIndicator.style.display = 'block'; 
    
    chatBody.appendChild(typingIndicator);
    chatBody.scrollTop = chatBody.scrollHeight;

    // 3. Lógica de Calificación
    if (option.action === 'rate_restaurant') {
        updateHeaderContext(null); 
        if (typeof showRatingAlert === 'function') {
            setTimeout(() => { 
                showRatingAlert(option.restaurantId, option.restaurantName); 
            }, 800);
        }
    }
    else if (option.action === 'rate') {
        updateHeaderContext(null);
        if (typeof showRatingAlert === 'function') {
            setTimeout(() => { showRatingAlert(); }, 800);
        }
    }

    // 4. Siguiente paso (Aquí es donde la magia de next: 'post_rating' funciona)
    setTimeout(() => {
        if(typingIndicator.parentNode) typingIndicator.remove();
        renderStep(option.next);
    }, 800); 
}

function addMessage(text, type) {
    if (!chatBody) return;
    const newMessage = document.createElement('div');
    newMessage.classList.add('message', type);
    newMessage.textContent = text;
    chatBody.appendChild(newMessage);
    chatBody.scrollTop = chatBody.scrollHeight;

    if (type === 'incoming' && voiceEnabled) {
        speakText(text);
    }
}

function resetChat() {
    Swal.fire({
        title: '¿Reiniciar Karu?',
        text: "Se borrará el historial actual.",
        icon: 'warning',
        showCancelButton: true,
        confirmButtonColor: '#d4af37',
        cancelButtonColor: '#6c757d',
        confirmButtonText: 'Sí, reiniciar',
        cancelButtonText: 'Cancelar'
    }).then((result) => {
        if (result.isConfirmed) {
            window.speechSynthesis.cancel();
            if (chatBody) chatBody.innerHTML = '';
            if (chatOptions) chatOptions.innerHTML = '';
            
            updateHeaderContext(null);
            showContextToast("Asistente Karu reiniciado");
            
            currentStep = 'start';
            renderStep('start');
            if (typeof closeModal === 'function') closeModal();
        }
    });
}

function toggleVoice() {
    voiceEnabled = !voiceEnabled;
    const btn = document.getElementById('voiceBtn');
    if (voiceEnabled) {
        if(btn) btn.textContent = '🔊'; 
        const lastMessage = chatBody.lastElementChild;
        if (lastMessage && lastMessage.classList.contains('incoming')) {
            speakText(lastMessage.textContent);
        }
        showContextToast("Voz de Karu Activada"); 
    } else {
        if(btn) btn.textContent = '🔇';
        window.speechSynthesis.cancel();
        showContextToast("Voz Desactivada");
    }
}

function speakText(text) {
    window.speechSynthesis.cancel();
    const emojiRegex = /([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g;
    const cleanText = text.replace(emojiRegex, '');
    const utterance = new SpeechSynthesisUtterance(cleanText);
    utterance.lang = 'es-ES'; 
    utterance.rate = 0.95; 
    utterance.pitch = 1.0; 
    window.speechSynthesis.speak(utterance);
}