Files
2026-06-30 14:57:45 -03:00

328 lines
12 KiB
JavaScript

document.addEventListener("DOMContentLoaded", () => {
iniciarSlider();
configurarChatInput();
});
/* ══════════════════════════════
SLIDER
══════════════════════════════ */
function iniciarSlider() {
// El slider corre por CSS animation (scroll-infinito), no necesita JS.
// Esta función existe por si se agrega lógica futura.
}
/* ══════════════════════════════
MAPA
══════════════════════════════ */
function toggleMapa() {
const modal = document.getElementById('modal-mapa');
modal.style.display = (modal.style.display === 'flex') ? 'none' : 'flex';
}
/* ══════════════════════════════
MODALES GENÉRICOS
══════════════════════════════ */
function cerrarModal(id) {
const el = document.getElementById(id);
if (el) el.style.display = 'none';
}
// Cerrar modales al hacer click fuera del contenido
document.addEventListener('click', function(e) {
if (e.target.classList.contains('modal')) {
e.target.style.display = 'none';
}
});
/* ══════════════════════════════
ALERTA ÉXITO (auto-ocultar)
══════════════════════════════ */
const alertSuccess = document.getElementById('success-alert');
if (alertSuccess) {
setTimeout(() => {
alertSuccess.style.transition = "opacity 0.5s ease";
alertSuccess.style.opacity = "0";
setTimeout(() => {
alertSuccess.remove();
const url = new URL(window.location);
url.searchParams.delete('exito');
window.history.replaceState({}, document.title, url);
}, 500);
}, 4000);
}
/* ══════════════════════════════
DROPDOWN CATEGORÍAS
══════════════════════════════ */
function toggleDropdown(event) {
event.stopPropagation();
document.getElementById("myDropdown").classList.toggle("show");
}
window.onclick = function(event) {
if (!event.target.matches('.dropbtn') && !event.target.matches('.dropbtn *')) {
const dropdown = document.getElementById("myDropdown");
if (dropdown && dropdown.classList.contains('show')) {
dropdown.classList.remove('show');
}
}
};
/* ══════════════════════════════
CHATBOT
══════════════════════════════ */
let intentos = 0;
let ultimaRespuestaFueDesconocida = false;
const MINUTOS_BLOQUEO = 10;
function configurarChatInput() {
const input = document.getElementById('chat-input-text');
if (!input) return;
input.addEventListener('keypress', function(e) {
if (e.key === 'Enter') enviarMensaje();
});
}
function enviarMensaje() {
const input = document.getElementById('chat-input-text');
if (!input) return;
const texto = input.value.trim();
if (!texto) return;
input.value = '';
procesarConsulta(texto.toLowerCase());
}
function toggleChat() {
const chatBox = document.getElementById('chat-box');
const logs = document.getElementById('chat-logs');
if (!chatBox) return;
const isVisible = window.getComputedStyle(chatBox).display !== 'none';
if (!isVisible) {
// Verificar bloqueo
const bloqueadoHasta = localStorage.getItem('chat_bloqueado_hasta');
if (bloqueadoHasta && Date.now() < parseInt(bloqueadoHasta)) {
const minutosRestantes = Math.ceil((parseInt(bloqueadoHasta) - Date.now()) / 60000);
chatBox.style.display = 'flex';
logs.innerHTML = `
<div class="chat-msg">
<div class="cm-msg-text">El chat estará disponible en <b>${minutosRestantes} minuto${minutosRestantes !== 1 ? 's' : ''}</b>.</div>
</div>
`;
// Deshabilitar input
const input = document.getElementById('chat-input-text');
const btn = document.querySelector('.chat-send-btn');
if (input) input.disabled = true;
if (btn) btn.disabled = true;
return;
}
// Sin bloqueo: abrir normal
chatBox.style.display = 'flex';
logs.innerHTML = `
<div class="chat-msg">
<div class="cm-msg-text">¡Hola! Soy el asistente de La Pecosa 🍎 ¿En qué puedo ayudarte?</div>
</div>
`;
const input = document.getElementById('chat-input-text');
const btn = document.querySelector('.chat-send-btn');
if (input) { input.disabled = false; input.focus(); }
if (btn) btn.disabled = false;
} else {
intentos = 0;
chatBox.style.display = 'none';
}
}
function procesarConsulta(mensaje) {
const logs = document.getElementById('chat-logs');
const divUsuario = document.createElement("div");
divUsuario.className = "chat-msg-user";
divUsuario.textContent = mensaje;
logs.appendChild(divUsuario);
logs.scrollTop = logs.scrollHeight;
fetch('consultar_bot.php', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: 'mensaje=' + encodeURIComponent(mensaje)
})
.then(r => r.json())
.then(data => {
agregarMensaje(data.respuesta);
if (data.accion === 'abrir_mapa') {
setTimeout(toggleMapa, 800);
} else if (data.accion === 'abrir_horarios') {
setTimeout(() => {
const modal = document.getElementById('modal-horarios-visual');
if (modal) modal.style.display = 'flex';
}, 600);
} else if (data.accion === 'abrir_novedades') {
setTimeout(() => {
const modal = document.getElementById('modal-novedades');
if (modal) modal.style.display = 'flex';
}, 600);
} else if (data.accion === 'mostrar_telefonos') {
mostrarTelefonos();
} else if (data.accion === 'mostrar_contacto') {
mostrarContacto();
} else if (data.accion === 'mostrar_redes') {
mostrarRedes();
} else if (data.accion === 'mostrar_pagos') {
const divBtns = document.createElement("div");
divBtns.className = "chat-opciones";
divBtns.innerHTML = `
<button class="opt-btn" onclick="procesarPago('presencial')"><i class="fa-solid fa-store"></i> Retiro presencial</button>
<button class="opt-btn" onclick="procesarPago('envio')"><i class="fa-solid fa-motorcycle"></i> Envío a domicilio</button>
`;
logs.appendChild(divBtns);
} else if (data.accion === 'forzar_cierre') {
intentos++;
if (intentos >= 3) {
agregarMensaje("No puedo seguir ayudándote por este medio. ¡Llamanos o escribinos! 😊");
// Guardar bloqueo
const hasta = Date.now() + MINUTOS_BLOQUEO * 60 * 1000;
localStorage.setItem('chat_bloqueado_hasta', hasta);
setTimeout(() => {
toggleChat();
intentos = 0;
}, 3000);
}
} else {
intentos = 0;
}
logs.scrollTop = logs.scrollHeight;
})
.catch(err => {
console.error("Error en el chatbot:", err);
agregarMensaje("No pude procesar tu consulta en este momento. ¡Llamanos por teléfono!");
});
}
function procesarPago(tipo) {
if (tipo === 'presencial') {
agregarMensaje("💵 <b>Medios de pago — Retiro presencial:</b><br>• Efectivo<br>• Tarjeta de Débito<br>• Transferencia (Alias: <b>LA.PECOSA.PARANA</b>)");
} else {
agregarMensaje("🚚 <b>Medios de pago — Envío a domicilio:</b><br>• Solo transferencia al Alias: <b>LA.PECOSA.PARANA</b>");
}
}
function mostrarTelefonos() {
//agregarMensaje("📞 Podés llamarnos a:");
const logs = document.getElementById('chat-logs');
const div = document.createElement("div");
div.className = "chat-links";
div.innerHTML = `
<a href="tel:03434231400" class="chat-link-btn"><i class="fa-solid fa-phone"></i> 0343 423-1400</a>
<a href="tel:03434312763" class="chat-link-btn"><i class="fa-solid fa-phone"></i> 0343 431-2763</a>
`;
logs.appendChild(div);
logs.scrollTop = logs.scrollHeight;
}
function mostrarContacto() {
//agregarMensaje("¡Contactanos por donde prefieras!");
const logs = document.getElementById('chat-logs');
const div = document.createElement("div");
div.className = "chat-links";
div.innerHTML = `
<a href="https://www.instagram.com/lapecosa.rotiseria" target="_blank" class="chat-link-btn chat-link-ig"><i class="fa-brands fa-instagram"></i> Instagram</a>
<a href="https://mail.google.com/mail/?view=cm&fs=1&to=lapecosaparana@gmail.com" target="_blank" class="chat-link-btn chat-link-mail"><i class="fa-solid fa-envelope"></i> Enviar correo</a>
<a href="tel:03434231400" class="chat-link-btn"><i class="fa-solid fa-phone"></i> 0343 423-1400</a>
`;
logs.appendChild(div);
logs.scrollTop = logs.scrollHeight;
}
function mostrarRedes() {
//agregarMensaje("📱 ¡Seguinos en nuestras redes!");
const logs = document.getElementById('chat-logs');
const div = document.createElement("div");
div.className = "chat-links";
div.innerHTML = `
<a href="https://www.instagram.com/lapecosa.rotiseria" target="_blank" class="chat-link-btn chat-link-ig"><i class="fa-brands fa-instagram"></i> Instagram</a>
<a href="https://mail.google.com/mail/?view=cm&fs=1&to=lapecosaparana@gmail.com" target="_blank" class="chat-link-btn chat-link-mail"><i class="fa-solid fa-envelope"></i> Enviar correo</a>
`;
logs.appendChild(div);
logs.scrollTop = logs.scrollHeight;
}
function agregarMensaje(texto) {
const logs = document.getElementById('chat-logs');
const div = document.createElement("div");
div.className = "chat-msg";
div.innerHTML = `<div class="cm-msg-text">${texto}</div>`;
logs.appendChild(div);
logs.scrollTop = logs.scrollHeight;
}
function talkToHuman() {
window.open("https://wa.me/543434231400?text=Hola! Necesito ayuda con un pedido", "_blank");
}
/* ══════════════════════════════
PROMO FLOTANTE
══════════════════════════════ */
let ultimaPromoId = 0;
let esPrimeraCarga = true;
function observarPromociones() {
fetch('verificar_promo.php')
.then(r => r.json())
.then(data => {
if (data && data.id) {
if (esPrimeraCarga) {
esPrimeraCarga = false;
ultimaPromoId = data.id;
mostrarPromoEnChatbot(data.mensaje, false);
return;
}
if (data.id > ultimaPromoId) {
ultimaPromoId = data.id;
mostrarPromoEnChatbot(data.mensaje, true);
}
}
})
.catch(err => console.error('Error al observar promos:', err));
}
function mostrarPromoEnChatbot(mensaje, forzarApertura) {
const chatLogs = document.getElementById('chat-logs');
const cartelFlotante = document.getElementById('alerta-flotante-promo');
const textoFlotante = document.getElementById('texto-alerta-flotante');
if (chatLogs) {
const div = document.createElement("div");
div.className = "chat-msg chat-promo";
div.innerHTML = `<div class="cm-msg-text">📢 <b>¡MENÚ DEL DÍA!</b><br>${mensaje}</div>`;
chatLogs.appendChild(div);
chatLogs.scrollTop = chatLogs.scrollHeight;
}
if (cartelFlotante && textoFlotante) {
textoFlotante.innerHTML = mensaje;
cartelFlotante.style.display = 'block';
setTimeout(() => {
cartelFlotante.style.opacity = '1';
cartelFlotante.style.transform = 'translateX(0)';
}, 100);
}
}
function cerrarAlertaFlotante() {
const cartel = document.getElementById('alerta-flotante-promo');
if (cartel) {
cartel.style.opacity = '0';
cartel.style.transform = 'translateX(-20px)';
setTimeout(() => { cartel.style.display = 'none'; }, 500);
}
}
observarPromociones();
setInterval(observarPromociones, 10000);