import React, { useState } from "react"; import { Product, OrderItem } from "../types"; import NoImagePlaceholder from "./NoImagePlaceholder"; import ImageZoomModal from "./ImageZoomModal"; import ProductStoreDeliveryModal from "./ProductStoreDeliveryModal"; import { authService } from "../src/services/auth.service"; interface ProductCardProps { product: Product; onAddToCart: (p: Product | OrderItem) => void; onViewDetails: (product: Product, quantity?: number) => void; } /** * ProductCard Component * Componente reutilizável para exibir um card de produto na lista de produtos * * @param product - Dados do produto a ser exibido * @param onAddToCart - Callback para adicionar produto ao carrinho * @param onViewDetails - Callback para abrir modal de detalhes */ const ProductCard: React.FC = ({ product: p, onAddToCart, onViewDetails, }) => { const [quantity, setQuantity] = useState(1); const [imageError, setImageError] = useState(false); const [showImageZoom, setShowImageZoom] = useState(false); const [showStoreDeliveryModal, setShowStoreDeliveryModal] = useState(false); // Calcular parcelamento (10x) const installmentValue = p.price / 10; return (
{/* Imagem do Produto */}
{p.image && !p.image.includes("placeholder") && p.image !== "https://placehold.co/200x200/f8fafc/949494/png?text=Sem+Imagem" && !imageError ? ( <> {p.name} { setImageError(true); }} /> {/* Botão de Zoom */} ) : ( )} {/* Badge de Desconto */} {typeof p.discount === "number" && p.discount > 0 && (
{p.discount.toFixed(2)}%
)} {/* Botão Ver Mais */}
{/* Informações do Produto */}
{/* Título do Produto */}

{p.name}

{/* Descrição Detalhada (se disponível) */} {p.description && (

{p.description}

)} {/* Informações: Marca - Código - EAN - Modelo */} {(() => { const parts: string[] = []; if (p.mark && p.mark !== "0" && p.mark !== "Sem marca") { parts.push(p.mark); } if (p.code && p.code !== "0") { parts.push(p.code); } if (p.ean && p.ean !== "0") { parts.push(p.ean); } if (p.model && p.model !== "0") { parts.push(p.model); } return parts.length > 0 ? (

{parts.join(" - ")}

) : null; })()} {/* Preços */}
{p.originalPrice && p.originalPrice > p.price && (

de R${" "} {p.originalPrice.toLocaleString("pt-BR", { minimumFractionDigits: 2, maximumFractionDigits: 2, })}

)}

por R${" "} {p.price.toLocaleString("pt-BR", { minimumFractionDigits: 2, maximumFractionDigits: 2, })}

{/* Parcelamento */}

ou em 10x de R${" "} {installmentValue.toLocaleString("pt-BR", { minimumFractionDigits: 2, maximumFractionDigits: 2, })}

{/* Informações de Estoque */}
Estoque loja {p.stockLocal.toFixed(2) || 0} UN
Estoque disponível {p.stockAvailable?.toFixed(2) || p.stockLocal.toFixed(0) || 0} UN
Estoque geral {p.stockGeneral.toFixed(2) || 0} UN
{/* Seletor de Quantidade e Botão Adicionar */}
{/* Seletor de Quantidade */}
{ const val = parseFloat(e.target.value) || 1; setQuantity(Math.max(1, val)); }} className="w-20 text-center text-sm font-bold border-0 focus:outline-none focus:ring-0" />
{/* Botão Adicionar */}
{/* Modal de Zoom da Imagem */} setShowImageZoom(false)} imageUrl={p.image || ""} productName={p.name} /> {/* Modal de Seleção de Loja e Tipo de Entrega */} setShowStoreDeliveryModal(false)} onConfirm={(stockStore, deliveryType) => { // Adicionar ao carrinho com as informações selecionadas onAddToCart({ ...p, quantity, stockStore, deliveryType, } as OrderItem); setShowStoreDeliveryModal(false); }} product={p} quantity={quantity} />
); }; export default ProductCard;