using MidrandBookshop.Services.ShoppingCart; using MidrandBookshop.Services.ShoppingCart.Models; namespace MidrandBookshop.Components.Pages; public partial class Checkout(CartService cartService) { [Inject] private AuthenticationStateProvider AuthStateProvider { get; set; } = default!; private Services.ShoppingCart.Models.Cart ShoppingCart => cartService.ShoppingCart; private AuthenticationState? AuthState { get; set; } private System.Security.Claims.ClaimsPrincipal? User { get; set; } private bool IsAuthenticated => User?.Identity?.IsAuthenticated ?? false; private decimal ShippingCost = 0; private bool IsSameAddress = true; private decimal OrderTotalAmount => ShoppingCart.TotalAmount + ShoppingCart.TotalVat + ShippingCost; protected override async Task OnInitializedAsync() { AuthState = await AuthStateProvider.GetAuthenticationStateAsync(); User = AuthState!.User; Navigation.LocationChanged += OnLocationChanged; cartService.OnCartChanged += CartService_OnCartChanged; } private async void CartService_OnCartChanged() => await InvokeAsync(StateHasChanged); private void OnLocationChanged(object? sender, LocationChangedEventArgs e) => StateHasChanged(); private async void ChangeQuantity(CartItem item, int delta) { var peekQuantity = item.Quantity + delta; if (peekQuantity < 1) return; cartService.UpdateQuantity(item.Price!.Id, delta); await cartService.SaveCartToStorageAsync(); } private async void RemoveFromCart(CartItem item) { cartService.RemoveOneItem(item.Price!.Id); await cartService.SaveCartToStorageAsync(); } private void CompletePurchase(MouseEventArgs args) => Navigation.NavigateTo("/payment-confirmation"); }