let currentEndTime = null; // Função para buscar dados do servidor async function fetchData() { try { const response = await fetch('api.php'); const data = await response.json(); if (data) { document.getElementById('current-action').innerText = data.title; document.getElementById('notes').innerText = data.notes; // Converte a data do MySQL para o timestamp do JS currentEndTime = new Date(data.end_time).getTime(); } } catch (error) { console.error("Erro ao buscar dados:", error); } } // Função para ajustar tempo enviando para o Banco async function adjustTime(seconds) { await fetch('api.php', { method: 'POST', body: JSON.stringify({ adjust_seconds: seconds }) }); fetchData(); // Atualiza a tela após salvar } // Função para avançar ação async function changeAction(dir) { if(dir === 'next') { await fetch('api.php', { method: 'POST', body: JSON.stringify({ action: 'next' }) }); fetchData(); } } function updateUI() { document.getElementById('clock-brasilia').innerText = new Date().toLocaleTimeString('pt-BR'); if (!currentEndTime) return; const now = new Date().getTime(); const distance = currentEndTime - now; const isOver = distance < 0; const absDistance = Math.abs(distance); const h = Math.floor((absDistance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); const m = Math.floor((absDistance % (1000 * 60 * 60)) / (1000 * 60)); const s = Math.floor((absDistance % (1000 * 60)) / 1000); const timerElement = document.getElementById("timer"); timerElement.innerText = (isOver ? "-" : "") + `${h.toString().padStart(2, '0')}:${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`; if (isOver) { timerElement.classList.add('text-red-500', 'animate-over'); } else { timerElement.classList.remove('text-red-500', 'animate-over'); timerElement.classList.add('text-blue-500'); } } // Sincroniza com o servidor a cada 2 segundos setInterval(fetchData, 2000); // Atualiza o relógio visual a cada 1 segundo setInterval(updateUI, 1000); fetchData(); // Carga inicial