function formatCheckoutEuro(value) { return `${Number(value || 0).toFixed(2).replace(".", ",")} EUR`; } let selectedPaymentMethod = ""; let checkoutEventsBound = false; function setCheckoutStep(step) { const step1 = document.getElementById("checkout-step-1"); const step2 = document.getElementById("checkout-step-2"); const step3 = document.getElementById("checkout-step-3"); step1?.classList.toggle("hidden", step !== 1); step2?.classList.toggle("hidden", step !== 2); step3?.classList.toggle("hidden", step !== 3); const line1 = document.getElementById("line-1"); const line2 = document.getElementById("line-2"); const indicator1 = document.getElementById("step-1-indicator"); const indicator2 = document.getElementById("step-2-indicator"); const indicator3 = document.getElementById("step-3-indicator"); indicator1?.classList.add("active"); indicator2?.classList.toggle("active", step >= 2); indicator3?.classList.toggle("active", step >= 3); line1?.classList.toggle("active", step >= 2); line2?.classList.toggle("active", step >= 3); } function renderCheckout() { const summaryList = document.getElementById("checkout-summary-list"); const totalDisplay = document.getElementById("checkout-total-display"); const vatDisplay = document.getElementById("checkout-vat-display"); const nextButton = document.getElementById("btn-next-step-2"); if (!summaryList) { return; } summaryList.innerHTML = ""; const safeCart = Array.isArray(cart) ? cart : []; const total = safeCart.reduce((sum, item) => sum + Number(item.price || 0), 0); const vat = total - total / 1.19; safeCart.forEach((item) => { const row = document.createElement("div"); row.style.cssText = "display:flex; justify-content:space-between; gap:12px; margin-bottom:10px; font-size:0.95rem;"; const infoText = item.category === "movie" ? `Sitz ${item.seatId || "-"} | ${item.hall || "-"} | ${item.time || "-"} Uhr` : `${item.time || "Standard"} | ${item.hall || "-"}`; row.innerHTML = `${item.title} (${infoText})${formatCheckoutEuro(item.price)}`; summaryList.appendChild(row); }); if (totalDisplay) { totalDisplay.innerText = `Gesamtbetrag: ${formatCheckoutEuro(total)}`; } if (vatDisplay) { vatDisplay.innerText = `inkl. 19% MwSt: ${formatCheckoutEuro(vat)}`; } selectedPaymentMethod = ""; document.querySelectorAll(".payment-method").forEach((method) => { method.classList.remove("selected"); }); nextButton?.classList.add("hidden"); setCheckoutStep(1); } function generateTicket() { const ticketContainer = document.getElementById("ticket-container"); if (!ticketContainer) { return; } const moviesInCart = (Array.isArray(cart) ? cart : []).filter((item) => item.category === "movie"); if (!moviesInCart.length) { ticketContainer.innerHTML = "

Danke fuer deinen Einkauf!

"; return; } const mainMovie = moviesInCart[0]; const matchingMovieSeats = moviesInCart .filter((item) => item.title === mainMovie.title && item.time === mainMovie.time) .map((item) => item.seatId) .join(", "); const qrData = encodeURIComponent(`EAGLE-IMAX|${mainMovie.title}|${mainMovie.hall}|${matchingMovieSeats}`); const qrUrl = `https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=${qrData}&bgcolor=ffffff`; ticketContainer.innerHTML = `
${mainMovie.title}
EAGLE'S IMAX PREMIUM

${mainMovie.title}

SAAL ${mainMovie.hall}

ZEIT ${mainMovie.time} Uhr

SITZE ${matchingMovieSeats || "-"}

`; } function saveOrderForCurrentUser(orderItems, orderTotal) { if (typeof currentUser === "undefined" || !currentUser) { return; } if (typeof users === "undefined" || !Array.isArray(users)) { return; } const order = { date: new Date().toLocaleString("de-DE"), items: orderItems, total: orderTotal, paymentMethod: selectedPaymentMethod || "-" }; const userIndex = users.findIndex((entry) => entry.email === currentUser.email); if (userIndex === -1) { return; } if (!Array.isArray(users[userIndex].orders)) { users[userIndex].orders = []; } users[userIndex].orders.push(order); localStorage.setItem("eagleUsers", JSON.stringify(users)); } function reserveSeatsAfterPayment(orderItems) { const movieItems = orderItems.filter((item) => item.category === "movie"); movieItems.forEach((item) => { const key = `${item.hall}-${item.time}`; if (!occupiedSeatsData[key]) { occupiedSeatsData[key] = []; } occupiedSeatsData[key].push(item.seatId); }); localStorage.setItem("eagleOccupied", JSON.stringify(occupiedSeatsData)); } function completeCheckout() { const orderItems = Array.isArray(cart) ? [...cart] : []; const orderTotal = orderItems.reduce((sum, item) => sum + Number(item.price || 0), 0); saveOrderForCurrentUser(orderItems, orderTotal); reserveSeatsAfterPayment(orderItems); cart = []; saveCart?.(); renderCart?.(); } function bindCheckoutEvents() { if (checkoutEventsBound) { return; } checkoutEventsBound = true; const nextButton = document.getElementById("btn-next-step-2"); const backButton = document.getElementById("btn-back-to-step1"); const payNowButton = document.getElementById("btn-pay-now"); document.querySelectorAll(".payment-method").forEach((method) => { method.addEventListener("click", () => { document.querySelectorAll(".payment-method").forEach((entry) => { entry.classList.remove("selected"); }); method.classList.add("selected"); selectedPaymentMethod = method.dataset.method || ""; nextButton?.classList.remove("hidden"); }); }); nextButton?.addEventListener("click", () => { if (!selectedPaymentMethod) { alert("Bitte waehle zuerst eine Zahlungsmethode aus."); return; } setCheckoutStep(2); }); backButton?.addEventListener("click", () => { setCheckoutStep(1); }); payNowButton?.addEventListener("click", () => { if (!Array.isArray(cart) || !cart.length) { alert("Dein Warenkorb ist leer."); return; } payNowButton.disabled = true; payNowButton.innerText = "Verarbeite..."; payNowButton.style.opacity = "0.7"; setTimeout(() => { setCheckoutStep(3); generateTicket(); completeCheckout(); payNowButton.disabled = false; payNowButton.innerText = "Jetzt Bezahlen"; payNowButton.style.opacity = "1"; }, 1200); }); } document.addEventListener("DOMContentLoaded", bindCheckoutEvents);