// Configurações const CONFIG = { API_BASE_URL: 'http://localhost:5000/api', WHATSAPP_NUMBER: '5543999762754', // Número da Maiara VENDEDORA_NOME: 'Maiara', EVOLUTION_API: { BASE_URL: 'https://criadordigital-evolution.jesdfs.easypanel.host', INSTANCE_NAME: 'Tiago', API_KEY: 'DBDF609168B1-48A3-8A4A-5E50D0300F2C' } }; // Estado global let produtos = []; let carrinho = []; let filtros = { marca: '', tamanho: '', genero: '' }; // Inicialização document.addEventListener('DOMContentLoaded', function() { carregarProdutos(); inicializarEventListeners(); atualizarContadorCarrinho(); }); // Event Listeners function inicializarEventListeners() { // Filtros document.getElementById('marcaFilter').addEventListener('change', aplicarFiltros); document.getElementById('tamanhoFilter').addEventListener('change', aplicarFiltros); document.getElementById('generoFilter').addEventListener('change', aplicarFiltros); // Smooth scroll para links de navegação document.querySelectorAll('a[href^="#"]').forEach(link => { link.addEventListener('click', function(e) { e.preventDefault(); const target = document.querySelector(this.getAttribute('href')); if (target) { target.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }); }); } // Função para carregar produtos do banco de dados async function carregarProdutos() { const loading = document.getElementById('loading'); const grid = document.getElementById('produtosGrid'); const noProducts = document.getElementById('noProducts'); try { loading.style.display = 'block'; // Buscar produtos da API const response = await fetch(`${CONFIG.API_BASE_URL}/catalogo/produtos`); if (!response.ok) { throw new Error('Erro ao buscar produtos'); } const data = await response.json(); console.log('Dados recebidos da API:', data); // Debug produtos = data.data || data || []; loading.style.display = 'none'; if (produtos.length === 0) { noProducts.style.display = 'block'; grid.innerHTML = ''; } else { noProducts.style.display = 'none'; popularFiltros(); renderizarProdutos(); } } catch (error) { console.error('Erro ao carregar produtos:', error); loading.style.display = 'none'; noProducts.style.display = 'block'; grid.innerHTML = ''; } finally { mostrarLoading(false); } } // Mostrar/ocultar loading function mostrarLoading(show) { const loading = document.getElementById('loading'); const grid = document.getElementById('produtosGrid'); if (show) { loading.style.display = 'block'; grid.style.display = 'none'; } else { loading.style.display = 'none'; grid.style.display = 'grid'; } } // Mostrar erro function mostrarErro(mensagem) { const grid = document.getElementById('produtosGrid'); grid.innerHTML = `

Ops! Algo deu errado

${mensagem}

`; } // Renderizar produtos function renderizarProdutos(produtosList = produtos) { const grid = document.getElementById('produtosGrid'); const noProducts = document.getElementById('noProducts'); console.log('Renderizando produtos:', produtosList); // Debug if (!produtosList || produtosList.length === 0) { grid.style.display = 'none'; noProducts.style.display = 'block'; return; } grid.style.display = 'grid'; noProducts.style.display = 'none'; grid.innerHTML = produtosList.map(produto => { console.log('Renderizando produto individual:', produto); // Debug // Pegar a primeira variação disponível para mostrar const variacao = produto.variacoes && produto.variacoes.length > 0 ? produto.variacoes[0] : null; const temEstoque = produto.estoque_total > 0 || (variacao && variacao.quantidade > 0); const preco = produto.valor_revenda || produto.preco_venda || 0; return `
${produto.foto_url ? `${produto.nome || 'Produto'} ` : variacao && variacao.foto_url ? `${produto.nome || 'Produto'} ` : `
` } ${!temEstoque ? '
Sem Estoque
' : ''}

${produto.marca ? produto.marca + ' - ' : ''}${produto.nome || 'Produto sem nome'}

${produto.id_produto ? `Cód: ${produto.id_produto}` : ''}
${variacao && variacao.tamanho ? `${variacao.tamanho}` : ''} ${variacao && variacao.cor ? `${variacao.cor}` : ''} ${produto.genero ? `${formatarGenero(produto.genero)}` : ''} ${produto.estacao ? `${formatarEstacao(produto.estacao)}` : ''}
${produto.fornecedor ? `Fornecedor: ${produto.fornecedor}` : ''} ${produto.estoque_total ? `Estoque: ${produto.estoque_total} unidades` : ''} ${variacao && !produto.estoque_total ? `Estoque: ${variacao.quantidade || 0} unidades` : ''}
R$ ${formatarPreco(preco)}
`; }).join(''); } // Formatadores function formatarPreco(preco) { return parseFloat(preco || 0).toLocaleString('pt-BR', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); } function formatarGenero(genero) { const generos = { 'masculino': 'Menino', 'feminino': 'Menina', 'unissex': 'Unissex' }; return generos[genero] || genero || 'Unissex'; } function formatarEstacao(estacao) { const estacoes = { 'verao': 'Verão', 'inverno': 'Inverno', 'outono': 'Outono', 'primavera': 'Primavera' }; return estacoes[estacao] || estacao || 'Meia Estação'; } function getCorBadge(cor) { const cores = { 'azul': '#c0daf3', 'rosa': '#ecbad7', 'amarelo': '#f9f295', 'verde': '#90ee90', 'vermelho': '#ffb3ba', 'branco': '#f6f4e6', 'preto': '#464444' }; return cores[cor?.toLowerCase()] || '#ddd9c7'; } function formatarGenero(genero) { const generos = { 'menino': 'Menino', 'menina': 'Menina', 'unissex': 'Unissex' }; return generos[genero] || 'Unissex'; } function formatarEstacao(estacao) { const estacoes = { 'verao': 'Verão', 'inverno': 'Inverno', 'meia-estacao': 'Meia Estação' }; return estacoes[estacao] || 'Meia Estação'; } // Filtros function aplicarFiltros() { filtros.categoria = document.getElementById('categoriaFilter').value; filtros.tamanho = document.getElementById('tamanhoFilter').value; filtros.genero = document.getElementById('generoFilter').value; let produtosFiltrados = produtos.filter(produto => { const matchCategoria = !filtros.categoria || produto.nome.toLowerCase().includes(filtros.categoria.toLowerCase()) || (produto.categoria && produto.categoria.toLowerCase().includes(filtros.categoria.toLowerCase())); const matchTamanho = !filtros.tamanho || produto.tamanho === filtros.tamanho; const matchGenero = !filtros.genero || produto.genero === filtros.genero; return matchCategoria && matchTamanho && matchGenero; }); renderizarProdutos(produtosFiltrados); } function limparFiltros() { document.getElementById('categoriaFilter').value = ''; document.getElementById('tamanhoFilter').value = ''; document.getElementById('generoFilter').value = ''; filtros = { categoria: '', tamanho: '', genero: '' }; renderizarProdutos(produtos); } // Carrinho de Compras function adicionarAoCarrinho(produtoId) { const produto = produtos.find(p => p.id === produtoId); if (!produto) return; const itemExistente = carrinho.find(item => item.id === produtoId); if (itemExistente) { itemExistente.quantidade += 1; } else { carrinho.push({ id: produto.id, nome: produto.nome, preco: parseFloat(produto.preco_venda), tamanho: produto.tamanho, genero: produto.genero, imagem: produto.imagem, quantidade: 1 }); } atualizarCarrinho(); mostrarNotificacao('Produto adicionado ao carrinho!', 'success'); // Animação do botão const btn = event.target.closest('.add-to-cart'); btn.style.transform = 'scale(0.95)'; setTimeout(() => { btn.style.transform = 'scale(1)'; }, 150); } function removerDoCarrinho(produtoId) { carrinho = carrinho.filter(item => item.id !== produtoId); atualizarCarrinho(); mostrarNotificacao('Produto removido do carrinho', 'info'); } function alterarQuantidade(produtoId, novaQuantidade) { if (novaQuantidade <= 0) { removerDoCarrinho(produtoId); return; } const item = carrinho.find(item => item.id === produtoId); if (item) { item.quantidade = novaQuantidade; atualizarCarrinho(); } } function atualizarCarrinho() { atualizarContadorCarrinho(); renderizarCarrinho(); atualizarTotalCarrinho(); } function atualizarContadorCarrinho() { const contador = document.querySelector('.cart-count'); const totalItens = carrinho.reduce((total, item) => total + item.quantidade, 0); contador.textContent = totalItens; // Animação do contador if (totalItens > 0) { contador.style.display = 'flex'; contador.style.animation = 'pulse 0.3s ease'; } else { contador.style.display = 'none'; } } function renderizarCarrinho() { const cartContent = document.getElementById('cartContent'); const cartFooter = document.getElementById('cartFooter'); if (carrinho.length === 0) { cartContent.innerHTML = `

Seu carrinho está vazio

Adicione produtos para começar!
`; cartFooter.style.display = 'none'; return; } cartContent.innerHTML = carrinho.map(item => `
${item.imagem ? `${item.nome}` : `` }
${item.nome}
${item.tamanho} • ${formatarGenero(item.genero)}
R$ ${formatarPreco(item.preco)}
${item.quantidade}
`).join(''); cartFooter.style.display = 'block'; } function atualizarTotalCarrinho() { const total = carrinho.reduce((sum, item) => sum + (item.preco * item.quantidade), 0); const totalElement = document.getElementById('cartTotal'); if (totalElement) { totalElement.textContent = formatarPreco(total); } } function toggleCart() { const sidebar = document.getElementById('cartSidebar'); const overlay = document.getElementById('overlay'); sidebar.classList.toggle('active'); overlay.classList.toggle('active'); if (sidebar.classList.contains('active')) { document.body.style.overflow = 'hidden'; } else { document.body.style.overflow = 'auto'; } } // Finalizar Pedido - WhatsApp function finalizarPedido() { if (carrinho.length === 0) { mostrarNotificacao('Seu carrinho está vazio!', 'warning'); return; } const total = carrinho.reduce((sum, item) => sum + (item.preco * item.quantidade), 0); const totalItens = carrinho.reduce((sum, item) => sum + item.quantidade, 0); let mensagem = `🛍️ *NOVO PEDIDO - LIBERI KIDS*\n\n`; mensagem += `👋 Olá ${CONFIG.VENDEDORA_NOME}! Gostaria de fazer um pedido:\n\n`; mensagem += `📦 *ITENS DO PEDIDO:*\n`; carrinho.forEach((item, index) => { mensagem += `${index + 1}. *${item.nome}*\n`; mensagem += ` • Tamanho: ${item.tamanho}\n`; mensagem += ` • Gênero: ${formatarGenero(item.genero)}\n`; mensagem += ` • Quantidade: ${item.quantidade}x\n`; mensagem += ` • Preço unitário: R$ ${formatarPreco(item.preco)}\n`; mensagem += ` • Subtotal: R$ ${formatarPreco(item.preco * item.quantidade)}\n\n`; }); mensagem += `📊 *RESUMO DO PEDIDO:*\n`; mensagem += `• Total de itens: ${totalItens}\n`; mensagem += `• *Valor total: R$ ${formatarPreco(total)}*\n\n`; mensagem += `📱 Pedido feito através do catálogo online da Liberi Kids\n`; mensagem += `🕐 ${new Date().toLocaleString('pt-BR')}\n\n`; mensagem += `Aguardo retorno para confirmar o pedido e combinar a entrega! 😊`; // Codificar mensagem para URL const mensagemCodificada = encodeURIComponent(mensagem); const urlWhatsApp = `https://wa.me/${CONFIG.WHATSAPP_NUMBER}?text=${mensagemCodificada}`; // Abrir WhatsApp window.open(urlWhatsApp, '_blank'); // Limpar carrinho após envio setTimeout(() => { if (confirm('Pedido enviado! Deseja limpar o carrinho?')) { carrinho = []; atualizarCarrinho(); toggleCart(); mostrarNotificacao('Pedido enviado com sucesso!', 'success'); } }, 1000); } // Notificações function mostrarNotificacao(mensagem, tipo = 'info') { // Remover notificação existente const existente = document.querySelector('.notification'); if (existente) { existente.remove(); } const notification = document.createElement('div'); notification.className = `notification notification-${tipo}`; notification.innerHTML = `
${mensagem}
`; // Estilos da notificação Object.assign(notification.style, { position: 'fixed', top: '100px', right: '20px', background: getCorNotificacao(tipo), color: 'white', padding: '1rem 1.5rem', borderRadius: '8px', boxShadow: '0 4px 12px rgba(0,0,0,0.15)', zIndex: '3000', animation: 'slideInRight 0.3s ease', maxWidth: '300px' }); document.body.appendChild(notification); // Remover após 3 segundos setTimeout(() => { notification.style.animation = 'slideOutRight 0.3s ease'; setTimeout(() => notification.remove(), 300); }, 3000); } function getIconeNotificacao(tipo) { const icones = { 'success': 'check-circle', 'error': 'exclamation-circle', 'warning': 'exclamation-triangle', 'info': 'info-circle' }; return icones[tipo] || 'info-circle'; } function getCorNotificacao(tipo) { const cores = { 'success': '#10b981', 'error': '#ef4444', 'warning': '#f59e0b', 'info': '#3b82f6' }; return cores[tipo] || '#3b82f6'; } // Adicionar animações CSS dinamicamente const style = document.createElement('style'); style.textContent = ` @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.1); } 100% { transform: scale(1); } } @keyframes slideInRight { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } @keyframes slideOutRight { from { transform: translateX(0); opacity: 1; } to { transform: translateX(100%); opacity: 0; } } `; document.head.appendChild(style); // Fechar carrinho ao clicar fora document.addEventListener('click', function(e) { const sidebar = document.getElementById('cartSidebar'); const cartBtn = document.querySelector('.cart-btn'); if (sidebar.classList.contains('active') && !sidebar.contains(e.target) && !cartBtn.contains(e.target)) { toggleCart(); } }); // Scroll suave para seções function scrollToSection(sectionId) { const section = document.getElementById(sectionId); if (section) { section.scrollIntoView({ behavior: 'smooth' }); } } // Função para abrir WhatsApp async function abrirWhatsApp() { const numero = CONFIG.WHATSAPP_NUMBER; const nome = CONFIG.VENDEDORA_NOME; const mensagem = `Olá ${nome}! Vim através do catálogo online da Liberi Kids e gostaria de saber mais sobre os produtos. Pode me ajudar?`; try { // Tentar enviar via Evolution API primeiro await enviarMensagemEvolution(mensagem); mostrarNotificacao('Mensagem enviada via WhatsApp!'); } catch (error) { console.error('Erro ao enviar via Evolution API:', error); // Fallback para WhatsApp Web const mensagemCodificada = encodeURIComponent(mensagem); const urlWhatsApp = `https://wa.me/${numero}?text=${mensagemCodificada}`; window.open(urlWhatsApp, '_blank'); } } // Popular filtros dinamicamente function popularFiltros() { // Marcas únicas const marcas = [...new Set(produtos.map(p => p.marca).filter(Boolean))]; const marcaSelect = document.getElementById('marcaFilter'); marcaSelect.innerHTML = ''; marcas.forEach(marca => { marcaSelect.innerHTML += ``; }); // Tamanhos únicos das variações const tamanhos = [...new Set(produtos.flatMap(p => p.variacoes?.map(v => v.tamanho) || [] ).filter(Boolean))]; const tamanhoSelect = document.getElementById('tamanhoFilter'); tamanhoSelect.innerHTML = ''; tamanhos.forEach(tamanho => { tamanhoSelect.innerHTML += ``; }); // Gêneros únicos const generos = [...new Set(produtos.map(p => p.genero).filter(Boolean))]; const generoSelect = document.getElementById('generoFilter'); generoSelect.innerHTML = ''; generos.forEach(genero => { generoSelect.innerHTML += ``; }); } // Aplicar filtros function aplicarFiltros() { filtros.marca = document.getElementById('marcaFilter').value; filtros.tamanho = document.getElementById('tamanhoFilter').value; filtros.genero = document.getElementById('generoFilter').value; const produtosFiltrados = produtos.filter(produto => { // Filtro por marca if (filtros.marca && produto.marca !== filtros.marca) { return false; } // Filtro por gênero if (filtros.genero && produto.genero !== filtros.genero) { return false; } // Filtro por tamanho (verifica nas variações) if (filtros.tamanho) { const temTamanho = produto.variacoes?.some(v => v.tamanho === filtros.tamanho); if (!temTamanho) { return false; } } return true; }); renderizarProdutos(produtosFiltrados); } // Funções do carrinho function adicionarAoCarrinho(produtoId) { const produto = produtos.find(p => p.id === produtoId); if (!produto) return; const itemExistente = carrinho.find(item => item.id === produtoId); if (itemExistente) { itemExistente.quantidade++; } else { carrinho.push({ id: produto.id, nome: `${produto.marca} - ${produto.nome}`, preco: produto.valor_revenda, quantidade: 1, foto: produto.foto_url || (produto.variacoes?.[0]?.foto_url) }); } atualizarContadorCarrinho(); mostrarNotificacao('Produto adicionado ao carrinho!'); } function atualizarContadorCarrinho() { const contador = document.querySelector('.cart-count'); const totalItens = carrinho.reduce((total, item) => total + item.quantidade, 0); contador.textContent = totalItens; } function mostrarNotificacao(mensagem) { const notificacao = document.createElement('div'); notificacao.className = 'notificacao'; notificacao.textContent = mensagem; notificacao.style.cssText = ` position: fixed; top: 20px; right: 20px; background: #25d366; color: white; padding: 1rem 1.5rem; border-radius: 10px; z-index: 9999; animation: slideIn 0.3s ease; `; document.body.appendChild(notificacao); setTimeout(() => { notificacao.remove(); }, 3000); } function toggleCart() { const cartSidebar = document.getElementById('cartSidebar'); const overlay = document.getElementById('overlay'); cartSidebar.classList.toggle('active'); overlay.classList.toggle('active'); if (cartSidebar.classList.contains('active')) { renderizarCarrinho(); } } function renderizarCarrinho() { const cartContent = document.querySelector('.cart-content'); const cartTotal = document.querySelector('.cart-total'); if (carrinho.length === 0) { cartContent.innerHTML = `

Seu carrinho está vazio

`; cartTotal.innerHTML = 'Total: R$ 0,00'; return; } const total = carrinho.reduce((sum, item) => sum + (item.preco * item.quantidade), 0); cartContent.innerHTML = carrinho.map(item => `

${item.nome}

R$ ${formatarPreco(item.preco)} x ${item.quantidade}

`).join(''); cartTotal.innerHTML = `Total: R$ ${formatarPreco(total)}`; } function removerDoCarrinho(produtoId) { const index = carrinho.findIndex(item => item.id === produtoId); if (index > -1) { carrinho.splice(index, 1); atualizarContadorCarrinho(); renderizarCarrinho(); } } async function finalizarPedido() { if (carrinho.length === 0) { mostrarNotificacao('Adicione produtos ao carrinho primeiro!'); return; } const total = carrinho.reduce((sum, item) => sum + (item.preco * item.quantidade), 0); const itens = carrinho.map(item => `${item.quantidade}x ${item.nome} - R$ ${formatarPreco(item.preco)}`).join('\n'); const mensagem = `🛍️ *Pedido Liberi Kids*\n\n${itens}\n\n💰 *Total: R$ ${formatarPreco(total)}*\n\nGostaria de finalizar este pedido!`; try { // Tentar enviar via Evolution API primeiro await enviarMensagemEvolution(mensagem); mostrarNotificacao('Pedido enviado via WhatsApp!'); // Limpar carrinho após envio carrinho = []; atualizarContadorCarrinho(); renderizarCarrinho(); toggleCart(); } catch (error) { console.error('Erro ao enviar via Evolution API:', error); // Fallback para WhatsApp Web const mensagemCodificada = encodeURIComponent(mensagem); const urlWhatsApp = `https://wa.me/${CONFIG.WHATSAPP_NUMBER}?text=${mensagemCodificada}`; window.open(urlWhatsApp, '_blank'); } } async function enviarMensagemEvolution(mensagem) { const response = await fetch(`${CONFIG.EVOLUTION_API.BASE_URL}/message/sendText/${CONFIG.EVOLUTION_API.INSTANCE_NAME}`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'apikey': CONFIG.EVOLUTION_API.API_KEY }, body: JSON.stringify({ number: CONFIG.WHATSAPP_NUMBER, text: mensagem }) }); if (!response.ok) { throw new Error('Falha ao enviar mensagem via Evolution API'); } return await response.json(); }