Buscar Productos

let resultadosFiltrados = []; // Definir todas las funciones primero (antes de DOMContentLoaded) function realizarBusqueda() { const query = document.getElementById('searchInput').value.toLowerCase().trim(); console.log('Buscando:', query); console.log('Total productos:', productosDB.length); if (query === '') { resultadosFiltrados = [...productosDB]; } else { resultadosFiltrados = productosDB.filter(p => p.nombre.toLowerCase().includes(query) || p.marca.toLowerCase().includes(query) || (p.descripcion && p.descripcion.toLowerCase().includes(query)) || (p.notas && p.notas.some(nota => nota.toLowerCase().includes(query))) || p.categoria.toLowerCase().includes(query) ); } console.log('Resultados encontrados:', resultadosFiltrados.length); aplicarFiltros(); } function aplicarFiltros() { const categoria = document.getElementById('filterCategoria').value; const marca = document.getElementById('filterMarca').value; const precioMin = parseFloat(document.getElementById('filterPrecioMin').value) || 0; const precioMax = parseFloat(document.getElementById('filterPrecioMax').value) || Infinity; const stock = document.getElementById('filterStock').value; // Si resultadosFiltrados está vacío por la búsqueda, mantenerlo vacío let filtrados = resultadosFiltrados; if (categoria !== 'todos') { filtrados = filtrados.filter(p => p.categoria === categoria); } if (marca !== 'todas') { filtrados = filtrados.filter(p => p.marca === marca); } filtrados = filtrados.filter(p => p.precio >= precioMin && p.precio <= precioMax); if (stock === 'disponible') { filtrados = filtrados.filter(p => p.stock > 0); } else if (stock === 'agotado') { filtrados = filtrados.filter(p => p.stock === 0); } resultadosFiltrados = filtrados; mostrarResultados(); } function mostrarResultados() { const grid = document.getElementById('resultsGrid'); const noResults = document.getElementById('noResults'); const resultsHeader = document.getElementById('resultsHeader'); const resultsCount = document.getElementById('resultsCount'); console.log('Mostrando resultados:', resultadosFiltrados.length); if (resultadosFiltrados.length === 0) { grid.innerHTML = ''; noResults.style.display = 'block'; resultsHeader.style.display = 'none'; console.log('Sin resultados - mostrando mensaje'); } else { noResults.style.display = 'none'; resultsHeader.style.display = 'flex'; resultsCount.textContent = `${resultadosFiltrados.length} productos encontrados`; grid.innerHTML = resultadosFiltrados.map(producto => `
${producto.nombre} ${producto.stock <= 3 && producto.stock > 0 ? `¡Últimas ${producto.stock} unidades!` : producto.stock === 0 ? `📦 Bajo pedido` : ''}

${producto.marca}

${producto.categoria.toUpperCase()}

${producto.nombre}

$${producto.precio.toFixed(2)}

`).join(''); } } function limpiarFiltros() { document.getElementById('searchInput').value = ''; document.getElementById('filterCategoria').value = 'todos'; document.getElementById('filterMarca').value = 'todas'; document.getElementById('filterPrecioMin').value = ''; document.getElementById('filterPrecioMax').value = ''; document.getElementById('filterStock').value = 'todos'; resultadosFiltrados = []; document.getElementById('resultsHeader').style.display = 'none'; document.getElementById('resultsGrid').innerHTML = ''; document.getElementById('noResults').style.display = 'none'; } function buscarSugerencia(termino) { document.getElementById('searchInput').value = termino; realizarBusqueda(); } function agregarAlCarritoDesdeIndex(productoId) { const producto = productosDB.find(p => p.id === productoId); let carrito = JSON.parse(localStorage.getItem('carrito')) || []; const itemExistente = carrito.find(item => item.id === productoId); if (itemExistente) { if (producto.stock > 0 && itemExistente.cantidad >= producto.stock) { alert(`Solo hay ${producto.stock} unidades disponibles`); return; } itemExistente.cantidad++; } else { carrito.push({...producto, cantidad: 1}); } localStorage.setItem('carrito', JSON.stringify(carrito)); const total = carrito.reduce((sum, item) => sum + item.cantidad, 0); document.querySelector('.cart-count').textContent = total; alert(`${producto.nombre} agregado al carrito`); } // Cargar productos al inicio async function cargarProductos() { try { const response = await fetch('inventario.json'); const data = await response.json(); productosDB = data.perfumes; // Actualizar contador del carrito const carrito = JSON.parse(localStorage.getItem('carrito')) || []; const total = carrito.reduce((sum, item) => sum + item.cantidad, 0); document.querySelector('.cart-count').textContent = total; // Cargar marcas en el filtro const marcas = [...new Set(productosDB.map(p => p.marca))].sort(); const selectMarca = document.getElementById('filterMarca'); marcas.forEach(marca => { const option = document.createElement('option'); option.value = marca; option.textContent = marca; selectMarca.appendChild(option); }); // Buscar si hay parámetros en la URL const urlParams = new URLSearchParams(window.location.search); const query = urlParams.get('q'); if (query) { document.getElementById('searchInput').value = query; realizarBusqueda(); } else { // Mostrar todos los productos al inicio resultadosFiltrados = [...productosDB]; mostrarResultados(); } } catch (error) { console.error('Error al cargar productos:', error); alert('Error al cargar los productos. Por favor recarga la página.'); } } // Event listeners document.addEventListener('DOMContentLoaded', function() { cargarProductos(); const searchInput = document.getElementById('searchInput'); const btnBuscar = document.getElementById('btnBuscar'); if (searchInput) { searchInput.addEventListener('keypress', function(e) { if (e.key === 'Enter') { e.preventDefault(); realizarBusqueda(); } }); } if (btnBuscar) { btnBuscar.addEventListener('click', function(e) { e.preventDefault(); console.log('Botón clickeado'); realizarBusqueda(); }); } });