import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { useCart } from '@/contexts/cart-context'; import { formatRupiah } from '@/lib/rupiah'; import { formatWhatsAppPhone } from '@/lib/format'; import type { Product } from '@/types/homepage'; import { ShoppingBag, ShoppingCart } from 'lucide-react'; import { toast } from 'sonner'; type ProductCardProps = { product: Product; onQuickView: (product: Product) => void; contactPhone?: string | null; }; const FALLBACK_IMAGE = 'https://images.unsplash.com/photo-1490481651871-ab68de25d43d?w=800&auto=format&fit=crop&q=80'; function getProductImage(product: Product): string { for (const variant of product.product_variants) { if (variant.photo_urls && variant.photo_urls.length > 0) { return variant.photo_urls[0]; } } return FALLBACK_IMAGE; } function getProductPriceRange(product: Product): string { const prices = product.product_variants.flatMap((v) => v.product_prices .filter((p) => p.type === 'retail') .map((p) => p.price), ); if (prices.length === 0) { const fallbackPrices = product.product_variants.flatMap((v) => v.product_prices.map((p) => p.price), ); if (fallbackPrices.length === 0) { return 'Rp 0'; } const min = Math.min(...fallbackPrices); const max = Math.max(...fallbackPrices); return min === max ? `Rp ${formatRupiah(min)}` : `Rp ${formatRupiah(min)} - Rp ${formatRupiah(max)}`; } const min = Math.min(...prices); const max = Math.max(...prices); return min === max ? `Rp ${formatRupiah(min)}` : `Rp ${formatRupiah(min)} - Rp ${formatRupiah(max)}`; } export default function ProductCard({ product, onQuickView, contactPhone }: ProductCardProps) { const { addItem } = useCart(); console.log(contactPhone) const handleAddToCart = () => { const variant = product.product_variants[0]; if (!variant) return; const retail = variant.product_prices.find((p) => p.type === 'retail'); const wholesale = variant.product_prices.find((p) => p.type === 'wholesale'); const price = retail?.price ?? wholesale?.price ?? 0; addItem({ productId: product.id, productName: product.name, variantId: variant.id, variantName: variant.name, priceType: 'retail', price, imageUrl: getProductImage(product), }); toast.success(`${product.name} ditambahkan ke keranjang`); }; const variant = product.product_variants[0]; const retail = variant?.product_prices.find((p) => p.type === 'retail'); const price = retail?.price ?? 0; const waMessage = encodeURIComponent( `Halo min, saya mau order, berikut pesanannya.\n\n*${product.name}*\n* Varian: ${variant?.name ?? '-'}\n* Harga: Rp ${formatRupiah(price)}\n* QTY : 1\n* Subtotal : Rp ${formatRupiah(price)}\n\nTotal: Rp ${formatRupiah(price)}\n\nMohon diinformasikan detail pembayaran dan proses selanjutnya ya, Kak.\n\nTerimakasih` ); const waUrl = `https://wa.me/${formatWhatsAppPhone(contactPhone || '')}?text=${waMessage}`; return (
{getProductPriceRange(product)}