// =========================================================================
// ARCHIVO: rating.js
// DESCRIPCIÓN: Sistema de Votos Globales (JSONBin.io)
// =========================================================================

// 👇👇👇 TU BIN ID YA ESTÁ PUESTO AQUÍ 👇👇👇
const BIN_ID = '696171d7ae596e708fd0e70c'; 

// 👇👇👇 ¡AQUÍ PEGA LA LLAVE QUE COPIASTE DEL MENÚ "API KEYS"! 👇👇👇
const API_KEY = '$2a$10$fWUAGLGdudoVUEAoTbS/B.uzpG7ewZ0e4yFjBT2Rz/bhKt2.h7HxO'; 

const API_URL = `https://api.jsonbin.io/v3/b/${BIN_ID}`;

// 1. LEER los votos desde Internet
window.getRatingData = async function(id) {
    try {
        const response = await fetch(API_URL, {
            method: 'GET',
            headers: {
                'X-Master-Key': API_KEY,
                'X-Bin-Meta': 'false' // Esto hace que venga directo el JSON limpio
            }
        });
        
        if (!response.ok) return { count: 0, sum: 0 };
        
        const data = await response.json();
        // Devolvemos los datos específicos de este restaurante
        return data[`restaurante_${id}`] || { count: 0, sum: 0 };
    } catch (error) {
        console.error("Error leyendo JSONBin:", error);
        return { count: 0, sum: 0 };
    }
};

// 2. GUARDAR el voto en Internet
async function saveRatingData(id, stars) {
    // A) Primero leemos toda la base de datos actual para no borrar lo de otros
    let globalData = {};
    try {
        const response = await fetch(API_URL, {
            method: 'GET',
            headers: { 
                'X-Master-Key': API_KEY,
                'X-Bin-Meta': 'false'
            }
        });
        if (response.ok) {
            globalData = await response.json();
        }
    } catch (e) {}

    // B) Obtenemos los datos actuales de ESTE restaurante
    const currentRest = globalData[`restaurante_${id}`] || { count: 0, sum: 0 };
    
    // C) Calculamos los nuevos valores
    const newData = {
        count: currentRest.count + 1,        // +1 Voto
        sum: currentRest.sum + parseInt(stars) // Sumamos estrellas
    };

    // D) Actualizamos el objeto en memoria
    globalData[`restaurante_${id}`] = newData;

    // E) Subimos (Sobreescribimos) la base de datos en la nube
    await fetch(API_URL, {
        method: 'PUT',
        headers: { 
            'Content-Type': 'application/json',
            'X-Master-Key': API_KEY
        },
        body: JSON.stringify(globalData)
    });

    return newData;
}

// 3. ACTUALIZAR la pantalla (Barra lateral)
window.updateSidebarDOM = function(id, newData) {
    const container = document.getElementById(`sidebar-stats-${id}`);
    if (container) {
        let average = "0.0";
        if (newData.count > 0) {
            average = (newData.sum / newData.count).toFixed(1);
        }
        
        // Actualizar promedio grande
        const scoreEl = container.querySelector('.rating-big-score');
        if(scoreEl) scoreEl.textContent = average;

        // Actualizar contador de personas
        const countEl = container.querySelector('.rating-count-label');
        if(countEl) countEl.innerHTML = `<i class="fas fa-users"></i> ${newData.count} Votos Globales`;

        // Actualizar estrellas visuales
        const starsContainer = container.querySelector('.rating-stars-display');
        if(starsContainer) {
            starsContainer.innerHTML = window.generateStarsHTML(average);
        }
    }
}

// Helper: Generar HTML de estrellas
window.generateStarsHTML = function(average) {
    let html = '';
    for (let i = 1; i <= 5; i++) {
        html += (i <= Math.round(average)) 
            ? '<i class="fas fa-star" style="color:#d4af37"></i>' 
            : '<i class="fas fa-star" style="color:#444"></i>';
    }
    return html;
};

// 4. FUNCIÓN DEL BOTÓN "CALIFICAR"
function showRatingAlert(restaurantId = null, restaurantName = 'Restaurante') {
    if (!restaurantId) return;

    Swal.fire({
        title: `Califica a: ${restaurantName}`,
        html: `
            <div id="starRating" style="font-size: 35px; cursor: pointer; margin: 15px 0;">
                <i class="fas fa-star star-btn" data-value="1" style="color:#555"></i>
                <i class="fas fa-star star-btn" data-value="2" style="color:#555"></i>
                <i class="fas fa-star star-btn" data-value="3" style="color:#555"></i>
                <i class="fas fa-star star-btn" data-value="4" style="color:#555"></i>
                <i class="fas fa-star star-btn" data-value="5" style="color:#555"></i>
            </div>
            <p style="font-size: 14px; color: #ccc;">Tu opinión se guardará globalmente.</p>
        `,
        showCancelButton: true,
        confirmButtonText: 'Enviar Voto',
        confirmButtonColor: '#d4af37',
        background: '#1a1a1a',
        color: '#fff',
        didOpen: () => {
            const stars = document.querySelectorAll('.star-btn');
            stars.forEach(star => {
                star.addEventListener('click', function() {
                    const val = this.getAttribute('data-value');
                    stars.forEach(s => {
                        s.style.color = s.getAttribute('data-value') <= val ? '#d4af37' : '#555';
                    });
                    document.getElementById('starRating').setAttribute('data-selected', val);
                });
            });
        },
        preConfirm: () => {
            const val = document.getElementById('starRating').getAttribute('data-selected');
            if (!val) Swal.showValidationMessage('Toca una estrella para votar');
            return val;
        }
    }).then(async (result) => {
        if (result.isConfirmed) {
            Swal.fire({ title: 'Guardando en la nube...', didOpen: () => Swal.showLoading(), background:'#1a1a1a', color:'#fff' });

            // Guardar y Actualizar
            const newData = await saveRatingData(restaurantId, result.value);
            window.updateSidebarDOM(restaurantId, newData);
            
            Swal.fire({
                icon: 'success',
                title: '¡Voto Guardado!',
                text: `Ahora hay ${newData.count} votos en total.`,
                confirmButtonColor: '#d4af37',
                background: '#0a0a0a',
                color: '#fff'
            });
        }
    });
}
window.showRatingAlert = showRatingAlert;