document.addEventListener('DOMContentLoaded', function() { const cartItemsContainer = document.getElementById('cart-items'); const checkoutBtn = document.getElementById('checkoutBtn'); const localPickupCheckbox = document.getElementById('localPickup'); // Załaduj zawartość koszyka loadCart(); // Dodaj event listeners if (localPickupCheckbox) { localPickupCheckbox.addEventListener('change', function() { // Pobierz aktualny stan koszyka i zaktualizuj podsumowanie const cartItems = Array.from(document.querySelectorAll('.card.mb-3')).map(card => { const bookId = card.querySelector('.decrease-btn').dataset.bookId; const quantity = parseInt(card.querySelector('.quantity-display').textContent); const cena = parseFloat(card.querySelector('.card-text').textContent.replace(' PLN', '')); const tytul = card.querySelector('.card-title').textContent; const obraz_url = card.querySelector('img').src; return { book_id: parseInt(bookId), quantity, cena, tytul, obraz_url }; }); updateSummary(cartItems); }); } if (checkoutBtn) { checkoutBtn.addEventListener('click', handleCheckout); } }); async function loadCart() { const cartItemsContainer = document.getElementById('cart-items'); if (!cartItemsContainer) return; cartItemsContainer.innerHTML = `
Ładowanie...
`; try { const response = await fetch('/api/cart', { credentials: 'include' }); if (!response.ok) { throw new Error(`Błąd HTTP: ${response.status}`); } const cartItems = await response.json(); displayCartItems(cartItems); // Ustaw checkbox jako odznaczony domyślnie (dostawa) const localPickupCheckbox = document.getElementById('localPickup'); if (localPickupCheckbox) { localPickupCheckbox.checked = false; } updateSummary(cartItems); } catch (error) { console.error('Błąd ładowania koszyka:', error); cartItemsContainer.innerHTML = `
Wystąpił błąd podczas ładowania koszyka: ${error.message}
`; } } function displayCartItems(cartItems) { const cartItemsContainer = document.getElementById('cart-items'); if (!cartItemsContainer) return; if (cartItems.length === 0) { cartItemsContainer.innerHTML = `
Twój koszyk jest pusty
`; return; } cartItemsContainer.innerHTML = ''; cartItems.forEach(item => { const itemElement = `
${item.tytul}
${item.tytul}

${item.cena} PLN

${item.quantity}
`; cartItemsContainer.innerHTML += itemElement; }); // Dodaj event listeners dla przycisków document.querySelectorAll('.decrease-btn').forEach(btn => { btn.addEventListener('click', () => updateCartItemQuantity(btn.dataset.bookId, -1)); }); document.querySelectorAll('.increase-btn').forEach(btn => { btn.addEventListener('click', () => updateCartItemQuantity(btn.dataset.bookId, 1)); }); document.querySelectorAll('.remove-btn').forEach(btn => { btn.addEventListener('click', () => removeCartItem(btn.dataset.bookId)); }); } async function updateCartItemQuantity(bookId, change) { try { const response = await fetch('/api/update-cart-quantity', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ book_id: parseInt(bookId), change: change }), credentials: 'include' }); if (response.ok) { const quantityElement = document.querySelector(`.decrease-btn[data-book-id="${bookId}"]`).nextElementSibling; const currentQuantity = parseInt(quantityElement.textContent); const newQuantity = currentQuantity + change; // Jeśli nowa ilość jest mniejsza lub równa 0, usuń produkt if (newQuantity <= 0) { const cartItem = quantityElement.closest('.card'); cartItem.style.opacity = '0'; setTimeout(() => { cartItem.remove(); updateSummaryFromDOM(); }, 300); // Dodatkowo wyślij żądanie usunięcia z serwera await fetch(`/api/remove-from-cart/${bookId}`, { method: 'DELETE', credentials: 'include' }); } else { // Animacja zmiany ilości quantityElement.textContent = newQuantity; updateSummaryFromDOM(); } } else { alert('Błąd aktualizacji ilości'); } } catch (error) { console.error('Błąd:', error); alert('Wystąpił błąd podczas aktualizacji ilości'); } } function updateSummaryFromDOM() { const cartItems = Array.from(document.querySelectorAll('.card.mb-3')).map(card => { const bookId = card.querySelector('.decrease-btn').dataset.bookId; const quantity = parseInt(card.querySelector('.quantity-display').textContent); const cena = parseFloat(card.querySelector('.card-text').textContent.replace(' PLN', '')); const tytul = card.querySelector('.card-title').textContent; const obraz_url = card.querySelector('img').src; return { book_id: parseInt(bookId), quantity, cena, tytul, obraz_url }; }); updateSummary(cartItems); } function updateSummary(cartItems) { const localPickupCheckbox = document.getElementById('localPickup'); const productsValueEl = document.getElementById('products-value'); const deliveryValueEl = document.getElementById('delivery-value'); const totalValueEl = document.getElementById('total-value'); if (!productsValueEl || !deliveryValueEl || !totalValueEl) return; // Oblicz wartość produktów let productsValue = 0; if (cartItems && cartItems.length > 0) { productsValue = cartItems.reduce((total, item) => { return total + (item.cena * item.quantity); }, 0); } productsValueEl.textContent = productsValue.toFixed(2) + ' PLN'; // Oblicz koszt dostawy: jeśli checkbox ZAZNACZONY to 0 (odbiór lokalny), w przeciwnym razie 12.99 (dostawa) const deliveryCost = localPickupCheckbox && localPickupCheckbox.checked ? 12.99 : 0; deliveryValueEl.textContent = deliveryCost.toFixed(2) + ' PLN'; const totalValue = productsValue + deliveryCost; totalValueEl.textContent = totalValue.toFixed(2) + ' PLN'; } async function removeCartItem(bookId) { try { const response = await fetch(`/api/remove-from-cart/${bookId}`, { method: 'DELETE', credentials: 'include' }); if (response.ok) { loadCart(); } else { alert('Błąd usuwania z koszyka'); } } catch (error) { console.error('Błąd:', error); alert('Wystąpił błąd podczas usuwania z koszyka'); } } async function handleCheckout() { const cartItemsContainer = document.getElementById('cart-items'); const localPickupCheckbox = document.getElementById('localPickup'); if (!cartItemsContainer || cartItemsContainer.innerHTML.includes('Twój koszyk jest pusty')) { alert('Twój koszyk jest pusty!'); return; } try { // Pobierz aktualną zawartość koszyka const response = await fetch('/api/cart', { credentials: 'include' }); if (!response.ok) { throw new Error('Błąd ładowania koszyka'); } const cartItems = await response.json(); // Przygotuj dane do zamówienia const checkoutData = { items: cartItems.map(item => ({ book_id: item.book_id, quantity: item.quantity })), total: parseFloat(document.getElementById('total-value').textContent), // Odwrócona logika: checked = odbiór lokalny, unchecked = dostawa delivery_type: localPickupCheckbox.checked ? "local" : "shipping" }; // Wyślij zamówienie const checkoutResponse = await fetch('/api/checkout', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(checkoutData), credentials: 'include' }); if (checkoutResponse.ok) { window.location.href = '/thankyou.html'; } else { const errorData = await checkoutResponse.json(); alert(`Błąd składania zamówienia: ${errorData.message || 'Nieznany błąd'}`); } } catch (error) { console.error('Błąd:', error); alert('Wystąpił błąd podczas składania zamówienia'); } }