(function () { "use strict"; const messagesEl = document.getElementById("messages"); const formEl = document.getElementById("composer"); const inputEl = document.getElementById("input"); const sendEl = document.getElementById("send"); const SESSION_KEY = "bookly_session_id"; let sessionId = sessionStorage.getItem(SESSION_KEY); if (!sessionId) { sessionId = crypto.randomUUID(); sessionStorage.setItem(SESSION_KEY, sessionId); } const GREETING = "Hi! I'm the Bookly support assistant. I can help you check on an order, start a return, or answer questions about shipping, returns, or password reset. How can I help today?"; function appendMessage(role, text) { const el = document.createElement("div"); el.className = "message message--" + role; el.textContent = text; messagesEl.appendChild(el); messagesEl.scrollTop = messagesEl.scrollHeight; return el; } function appendTypingIndicator() { const el = document.createElement("div"); el.className = "message message--assistant message--typing"; el.setAttribute("aria-label", "Assistant is typing"); el.innerHTML = ""; messagesEl.appendChild(el); messagesEl.scrollTop = messagesEl.scrollHeight; return el; } async function sendMessage(text) { const response = await fetch("/api/chat", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ session_id: sessionId, message: text }), }); if (!response.ok) { throw new Error("Server returned " + response.status); } const data = await response.json(); return data.reply; } formEl.addEventListener("submit", async function (event) { event.preventDefault(); const text = inputEl.value.trim(); if (!text) return; appendMessage("user", text); inputEl.value = ""; inputEl.disabled = true; sendEl.disabled = true; const typing = appendTypingIndicator(); try { const reply = await sendMessage(text); typing.remove(); appendMessage("assistant", reply); } catch (err) { typing.remove(); appendMessage( "assistant", "Sorry, I couldn't reach the server. Please try again in a moment." ); console.error(err); } finally { inputEl.disabled = false; sendEl.disabled = false; inputEl.focus(); } }); appendMessage("assistant", GREETING); inputEl.focus(); })();