// Laster og viser alle produkter - brukes ved app-initialisering og navigasjon // Henter data fra model og sender til view for rendering function loadProducts() { const products = getAllProducts(); updateView('products', { products }); } // Viser detaljside for spesifikt produkt basert på ID // Kaller updateView som håndterer både gyldige og ugyldige produkter function showProductDetail(productId) { const product = getProductById(productId); updateView('product-detail', { product }); } // Hovedfunksjon for å legge produkter i handlekurv // Koordinerer mellom model (dataendring) og view (brukernotifikasjon + UI-oppdatering) function handleAddToCart(productId) { const success = addToCart(productId); // Model-operasjon som returnerer boolean if (success) { // Henter produktnavn for personlig notifikasjon const product = getProductById(productId); updateView('notification', { message: product.name + ' lagt til i handlekurv!' }); // Oppdaterer handlekurvvisning og teller umiddelbart updateCartDisplay(); } else { // Viser feilmelding hvis produktet ikke eksisterer updateView('notification', { message: 'Feil ved å legge produktet i handlekurven' }); } } // Fjerner produkt fra handlekurv med brukerbekreftelse // Kombinerer model-operasjon med brukernotifikasjon function handleRemoveFromCart(productId) { removeFromCart(productId); // Model-operasjon updateView('notification', { message: 'Vare fjernet fra handlekurv' }); updateCartDisplay(); // Oppdaterer UI umiddelbart } // Endrer antall av et produkt i handlekurv (+1 eller -1) // Inneholder defensiv sjekk selv om UI-logikk ikke burde kalle dette for ikke-eksisterende varer function changeQuantity(productId, change) { const cart = getCart(); const item = cart.find(item => item.productId === productId); // Sikkerhetsjekk - kun hvis varen faktisk finnes i handlekurven // Forhindrer feil hvis UI og model kommer ut av synk if (item) { const newQuantity = item.quantity + change; updateCartQuantity(productId, newQuantity); // Model håndterer edge cases (quantity <= 0) updateCartDisplay(); // Oppdaterer UI for å reflektere endringer } // Ingen else - ignorerer stille forsøk på å endre ikke-eksisterende varer } // Tømmer hele handlekurven med bekreftelsdialog // Forhindrer utilsiktet tap av handlekurvinnhold function handleClearCart() { // Browser-standard confirm() for brukersikkerhet if (confirm('Er du sikker på at du vil tømme handlekurven?')) { clearCart(); // Model-operasjon updateView('notification', { message: 'Handlekurv tømt' }); updateCartDisplay(); // Oppdaterer til tom handlekurv } // Ingen else - kansellering ignoreres stille } // Navigerer til produktoversikt - brukes fra tilbake-knapp og hovednavigasjon // Laster ferske produktdata og rendrer siden function navigateToProducts() { const products = getAllProducts(); updateView('products', { products }); } // Navigerer til handlekurvside med komplett handlekurvstatus // Samler all nødvendig data fra model i én operasjon function navigateToCart() { const cart = getCart(); const total = getCartTotal(); const itemCount = getCartItemCount(); // Sender all handlekurvdata til view for komplett rendering updateView('cart', { cartItems: cart, total, itemCount }); } // Oppdaterer handlekurvvisning etter endringer (add, remove, quantity change) // Koordinerer mellom handlekurvside og navigationsteller function updateCartDisplay() { const cart = getCart(); const total = getCartTotal(); const itemCount = getCartItemCount(); // Oppdaterer handlekurvside (hvis bruker er på den siden) updateView('cart', { cartItems: cart, total, itemCount }); // Oppdaterer også telleren i navigasjonen (synlig på alle sider) updateView('cart-count', { count: itemCount }); }