'use client'; import type { MenuItem } from '@/domain/menu/entities'; import WishlistButton from '@/components/WishlistButton'; import { applyNextImageFallback, getMenuPosterCandidates, getMenuPosterSrc, } from '@/lib/assets'; export type SignatureDish = MenuItem & { desc: string; }; interface SignatureMenuMarqueeProps { dishes: SignatureDish[]; addToCartLabel: string; perHalfKgLabel: string; perKgLabel: string; onAdd: (dish: SignatureDish) => void; } function renderMarqueePrice( item: MenuItem, perHalfKgLabel: string, perKgLabel: string ) { if (item.pricing === 'weight') { return (
{item.pricePerHalfKg ?? item.price}
{perHalfKgLabel}
{item.pricePerKg} {perKgLabel}
); } return (
{item.price}
KR
); } const CARD_WIDTH = 240; const CARD_GAP = 20; export default function SignatureMenuMarquee({ dishes, addToCartLabel, perHalfKgLabel, perKgLabel, onAdd, }: SignatureMenuMarqueeProps) { if (dishes.length === 0) return null; const reelItems = [...dishes, ...dishes]; const trackWidth = reelItems.length * (CARD_WIDTH + CARD_GAP); const durationSeconds = Math.max(50, dishes.length * 2.8); return (
{reelItems.map((dish, index) => (
onAdd(dish)} >
{dish.name} { applyNextImageFallback( e.target as HTMLImageElement, getMenuPosterCandidates(dish), (e.target as HTMLImageElement).src ); }} />

{dish.name}

{renderMarqueePrice(dish, perHalfKgLabel, perKgLabel)}

{dish.desc}

))}
); }