@page "/product/{Id:guid}" @inject ProductAPIConsumer ProductService
@if (_loading) {

@Loc["Loading_Product"]...

} else if (_product == null) {

@Loc["Product_Not_Found"]

@Loc["Back_to_Shop"]
} else {
@if (!string.IsNullOrEmpty(_product.CategoryName)) { @_product.CategoryName }

@(_product.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)

@(_product.Price * (1 - _product.Discount / 100)) $ @if (_product.Discount > 0) { @_product.Price $ -@_product.Discount% }
@if (_activeTab == "description") {

@(_product.Translations?.FirstOrDefault()?.Info?.Description ?? string.Empty)

} else if (_activeTab == "technical") { @if (_product.Translations?.FirstOrDefault()?.Info?.TechnicalDetails != null && _product.Translations?.FirstOrDefault()?.Info?.TechnicalDetails?.Any() == true) {

@Loc["Technical_Specifications"]

@foreach (var detail in _product.Translations?.FirstOrDefault()?.Info?.TechnicalDetails ?? new()) {
@detail.Key
@detail.Value
}
} else {

@Loc["No_Technical_Details_Available"]

} }
@if (_product.IsBundle && _product.ChildProducts?.Any() == true) {

@Loc["Included_in_this_Bundle"]

@Loc["Consisting_of"]:
@(_product.ChildProducts.Count) @Loc["Items"]
@foreach (var child in _product.ChildProducts) {
@if (child.Photos?.Length > 0) { @(child.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty) } else {
}

@(child.Translations?.FirstOrDefault()?.Info?.Name ?? string.Empty)

@(child.Translations?.FirstOrDefault()?.Info?.Description ?? string.Empty)

@Loc["View_Details"]
}
} }
@code { [Parameter] public Guid Id { get; set; } private ProductVM? _product; private bool _loading = true; private string _activeTab = "description"; protected override async Task OnParametersSetAsync() { _loading = true; try { _product = await ProductService.GetProduct(Id.ToString()); } catch (Exception ex) { Console.WriteLine($"Error fetching product: {ex.Message}"); } finally { _loading = false; } } }