@include('front.partials.catalog-card-styles') @if($products->isNotEmpty()) @php $translator = app(\App\Services\TranslationService::class); $locale = app()->getLocale(); @endphp @foreach($products as $product) @if($product instanceof \App\Models\RestaurantMenuItem) {{-- Carte « plat » (Viki Restaurant). --}} @php $dishThumb = $product->firstPhotoPath(); $dishName = $translator->translate($product->name, $locale); $resto = $product->restaurateur; $restoName = $resto ? ($resto->company ?: $resto->name) : null; $dishInWishlist = in_array($product->id, $wishlistDishIds ?? []); @endphp

{{ $dishName }}

@include('front.partials.card-rating', [ 'avg' => $product->reviews_avg_rating, 'count' => $product->reviews_count ?? null, 'ratingStyle' => 'margin: 6px 0;', ]) @include('front.partials.card-distance', ['item' => $product]) @if($restoName) {{-- La pastille tient sur une ligne et tronque : le nom complet reste accessible en infobulle. --}} {{ $restoName }}{{ $resto->city ? ' · ' . $resto->city : '' }} @endif
{{ display_price($product->price, $product->currency) }}
@csrf
@continue @endif @if($product instanceof \App\Models\Maison) {{-- Carte « maison » (Viki Location de Logements) --}}

{{ $product->title }}

@include('front.partials.card-rating', [ 'avg' => $product->reviews_avg_rating, 'count' => $product->reviews_count ?? null, 'ratingStyle' => 'margin: 6px 0;', ]) @include('front.partials.card-distance', ['item' => $product]) {{ $product->city }}{{ $product->country ? ', ' . $product->country : '' }}
@if($product->reducted_price > 0 && $product->reducted_price < $product->price) {{ display_price($product->reducted_price, $product->currency) }} @else {{ display_price($product->price, $product->currency) }} @endif
@continue @endif @if($product->is_custom) {{-- Carte « création sur mesure » : on renvoie vers le configurateur, le client ne peut pas l'ajouter au panier sans l'avoir personnalisée. --}} @php $creationImage = $product->firstImage; $creationName = $translator->translate($product->product_name, $locale); @endphp

{{ $creationName }}

{{-- Une création sur mesure est un Product : même bascule que le catalogue. --}} @include('front.partials.card-rating', [ 'avg' => $product->reviews_avg_rating, 'count' => $product->reviews_count ?? null, 'ratingStyle' => 'margin: 6px 0;', ]) @include('front.partials.card-distance', ['item' => $product]) @if($product->production_delay_days) {{ $product->production_delay_days }} {{ __('surmesure.days') }} @else {{ __('surmesure.pricing_' . $product->pricing_mode) }} @endif
@if($product->pricing_mode === 'quote') {{ __('surmesure.from') }} {{ display_price($product->final_price, $product->currency) }} @else {{ display_price($product->final_price, $product->currency) }} @endif
@if($product->free_shipping) @include('front.partials.free-shipping-badge', ['style' => 'margin:4px 0 8px; font-size:12px;']) @endif
@continue @endif

{{ $translatedName }}

@php $isInWishlist = in_array($product->id, $wishlistProductIds ?? []); $avgRating = round($product->reviews_avg_rating ?? 0, 1); $fullStars = floor($avgRating); $hasHalfStar = ($avgRating - $fullStars) >= 0.5; @endphp
@for($i = 1; $i <= 5; $i++) @if($i <= $fullStars) @elseif($i == $fullStars + 1 && $hasHalfStar) @else @endif @endfor {{ $avgRating }}/5 @if($product->reviews_count ?? false) ({{ $product->reviews_count }}) @endif
@include('front.partials.card-distance', ['item' => $product]) {{ __('messages.' . $product->etatProduit) }}
@if($product->reducted_price > 0 && $product->reducted_price < $product->product_price) {{ display_price($product->reducted_price, $product->currency) }} @else {{ display_price($product->product_price, $product->currency) }} @endif
@if($product->free_shipping) @include('front.partials.free-shipping-badge', ['style' => 'margin:4px 0 8px; font-size:12px;']) @endif {{-- Une déclinaison à choisir ne se résout pas depuis un listing : la carte garde le même bouton que les autres produits, mais emmène le client sur la fiche avec la quantité déjà saisie. --}} @if($product->requiresVariantChoice())
@else @csrf @endif
@endforeach @else
@if($visitorLocationLabel ?? null) @include('front.partials.location-empty') @else

{{ __('messages.no_product_available') }}

@endif
@endif