0
Meu carrinho
Carrinho Vazio

Tempo de Garantia

Todas as garantias são dadas pelos fabricantes, e variam de produto para produto. Elas serão informadas nas páginas de cada produto. Caso tenha alguma dúvida, entre em contato conosco.

Para devoluções, os produtos deverão ser remetidos em suas embalagens originais e caso for constatado mal uso, o custo será por parte do comprador.
Ganhe mais ${CONFIG.discountPercent} com o cupom ${CONFIG.couponCode} ao finalizar a compra
⏰ Expira em: 10:00
`; return div; } // ============================================ // FUNÇÃO: INSERIR TIMER NO DOM // ============================================ function insertTimer() { const wrapper = document.querySelector(CONFIG.timerWrapperSelector); if (!wrapper) { console.warn('EVUS Timer: Wrapper não encontrado:', CONFIG.timerWrapperSelector); return false; } // Verificar se já existe if (wrapper.querySelector('[data-evus-timer]')) { return true; } // Criar e inserir timerElement = createTimerElement(); wrapper.appendChild(timerElement); isTimerInserted = true; console.log('EVUS Timer: Timer inserido com sucesso'); return true; } // ============================================ // FUNÇÃO: ATUALIZAR DISPLAY DO TIMER // ============================================ function updateDisplay() { if (!timerElement || !isTimerInserted) { return; } const now = Date.now(); const remaining = Math.max(0, endTime - now); const seconds = Math.floor(remaining / 1000); if (seconds <= 0) { onTimerExpired(); return; } const minutes = Math.floor(seconds / 60); const secs = seconds % 60; const formatted = `${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`; const displayElement = timerElement.querySelector('[data-timer-display]'); if (displayElement) { displayElement.textContent = formatted; } // Modo urgente if (seconds <= CONFIG.urgentThreshold) { timerElement.classList.add('urgent'); } else { timerElement.classList.remove('urgent'); } } // ============================================ // FUNÇÃO: INICIAR CONTAGEM REGRESSIVA // ============================================ function startCountdown() { if (timerInterval) { clearInterval(timerInterval); } updateDisplay(); timerInterval = setInterval(updateDisplay, 1000); } // ============================================ // FUNÇÃO: TIMER EXPIRADO // ============================================ function onTimerExpired() { clearInterval(timerInterval); const displayElement = timerElement?.querySelector('[data-timer-display]'); if (displayElement) { displayElement.textContent = '00:00'; } // Remover após 3 segundos setTimeout(() => { if (timerElement) { timerElement.style.animation = 'slideIn 0.5s ease-out reverse'; setTimeout(() => { timerElement.remove(); isTimerInserted = false; }, 500); } }, 3000); } // ============================================ // FUNÇÃO: INICIALIZAR TIMER // ============================================ function initTimer() { // Verificar localStorage if (CONFIG.useLocalStorage) { const savedEndTime = localStorage.getItem(CONFIG.storageKey); if (savedEndTime) { endTime = parseInt(savedEndTime, 10); const now = Date.now(); if (endTime > now) { // Timer ainda válido if (insertTimer()) { startCountdown(); } return; } else { // Verificar se deve resetar const timeSinceExpiry = now - endTime; const resetThreshold = CONFIG.resetAfterMinutes * 60 * 1000; if (timeSinceExpiry < resetThreshold) { // Não mostrar timer return; } } } } // Criar novo timer endTime = Date.now() + (CONFIG.durationSeconds * 1000); if (CONFIG.useLocalStorage) { localStorage.setItem(CONFIG.storageKey, endTime.toString()); } if (insertTimer()) { startCountdown(); } } // ============================================ // FUNÇÃO: CONFIGURAR MUTATION OBSERVER // ============================================ function setupObserver() { const priceContainer = document.querySelector(CONFIG.priceContainerSelector); if (!priceContainer) { console.warn('EVUS Timer: Container de preço não encontrado:', CONFIG.priceContainerSelector); console.warn('EVUS Timer: Verifique o seletor nas configurações!'); return; } console.log('EVUS Timer: Observando container:', CONFIG.priceContainerSelector); observer = new MutationObserver((mutations) => { // Verificar se timer ainda existe const wrapper = document.querySelector(CONFIG.timerWrapperSelector); const timerExists = wrapper?.querySelector('[data-evus-timer]'); if (!timerExists && endTime && Date.now() < endTime) { console.log('EVUS Timer: Timer removido, reinserindo...'); isTimerInserted = false; insertTimer(); } }); // Observar mudanças no container e seus filhos observer.observe(priceContainer, { childList: true, subtree: true, attributes: false }); // Também observar o wrapper do timer const wrapper = document.querySelector(CONFIG.timerWrapperSelector); if (wrapper) { observer.observe(wrapper, { childList: true, subtree: true }); } } // ============================================ // INICIALIZAÇÃO // ============================================ function init() { // Aguardar DOM estar pronto if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); return; } console.log('EVUS Timer: Inicializando...'); // Verificar se estamos na página de produto const wrapper = document.querySelector(CONFIG.timerWrapperSelector); if (!wrapper) { console.log('EVUS Timer: Não é página de produto, abortando'); return; } // Inicializar timer initTimer(); // Configurar observer setupObserver(); console.log('EVUS Timer: Inicialização completa'); } // Executar init(); })();