{{-- Карточка заведения в сетке (ТЗ §8.4), разметка по макету `design/new design and ui`. Показывает всё, по чему гость выбирает: фото, кухню, чек, рейтинг, статус работы и доступность. Устаревшая доступность помечается честно — выдавать её за актуальную нельзя. --}} @props([ 'venue', 'availability' => null, 'isOpen' => null, 'distance' => null, 'isFavorite' => null, ]) @php $rating = $venue->rating; $hasRating = $rating !== null && $rating->reviews_count > 0; $photo = $venue->profile?->primaryPhoto?->previewUrl(); $status = $availability?->status; // Состояние избранного берётся из общего списка гостя: спрашивать базу на // каждую карточку — это N+1 на странице каталога (ТЗ §19.1). $favorite = $isFavorite ?? (($favorites ?? null)?->has($venue->id) ?? false); // Мета одной строкой, как в макете: кухня · чек · адрес. $meta = collect([ $venue->cuisines->first()?->name, $venue->profile?->average_bill ? $venue->profile->averageBillForHumans() : null, $venue->address, ])->filter()->implode(' · '); $slots = $availability?->nearestSlotsForHumans($venue->timezone) ?? []; @endphp
@if ($photo) {{ $venue->name }} — {{ $venue->address }} @else {{ $venue->name }} @endif

{{ $venue->name }}

@if ($hasRating) {{ number_format((float) $rating->average_rating, 1, ',', '') }} @endif
{{ $meta }} @if ($distance !== null) · {{ $distance < 1 ? round($distance * 1000).' м' : number_format($distance, 1, ',', '').' км' }} @endif
{{ $hasRating ? trans_choice(':count отзыв|:count отзыва|:count отзывов', $rating->reviews_count, ['count' => $rating->reviews_count]) : 'Нет отзывов' }} @if ($isOpen !== null) · {{ $isOpen ? 'Открыто' : 'Закрыто' }} @endif @if ($status && $status !== \App\Domain\Availability\Enums\AvailabilityStatus::Unknown) · $status->isBookable() && $status !== \App\Domain\Availability\Enums\AvailabilityStatus::FewLeft, 'text-primary-hover' => $status === \App\Domain\Availability\Enums\AvailabilityStatus::FewLeft, 'text-danger' => ! $status->isBookable(), ])>{{ $status->label() }} @endif
@if ($slots !== [])
@foreach ($slots as $slot) {{ $slot }} @endforeach
@endif $status?->isBookable() ?? true, 'btn-secondary' => ($status?->isBookable() ?? true) === false, ])> {{ ($status?->isBookable() ?? true) ? 'Забронировать' : 'Смотреть карточку' }}