import React, { useState } from "react"; import { Product } from "../types"; import NoImagePlaceholder from "./NoImagePlaceholder"; import ImageZoomModal from "./ImageZoomModal"; import ProductStoreDeliveryModal from "./ProductStoreDeliveryModal"; import { authService } from "../src/services/auth.service"; interface ProductListItemProps { product: Product; quantity: number; onQuantityChange: (quantity: number) => void; onAddToCart: ( product: Product, quantity: number, stockStore?: string, deliveryType?: string ) => void; onViewDetails: (product: Product, quantity?: number) => void; } /** * ProductListItem Component * Componente para exibir um produto no modo lista */ const ProductListItem: React.FC = ({ product, quantity, onQuantityChange, onAddToCart, onViewDetails, }) => { const [imageError, setImageError] = useState(false); const [showImageZoom, setShowImageZoom] = useState(false); const [showStoreDeliveryModal, setShowStoreDeliveryModal] = useState(false); return (
{/* Imagem do produto */}
{product.image && product.image !== "https://placehold.co/200x200/f8fafc/949494/png?text=Sem+Imagem" && !product.image.includes("placeholder") && !imageError ? ( <> {product.name} { setImageError(true); }} /> {/* Badge de Desconto */} {typeof product.discount === "number" && product.discount > 0 && (
{product.discount.toFixed(2)}%
)} {/* Botão de Zoom */} ) : ( )}
{/* Informações do produto */}
{/* Parte superior: Título, descrição, informações */}

{product.name}

{/* Descrição */} {product.description && (

{product.description}

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

{parts.join(" - ")}

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

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

)}

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

{/* Parcelamento */}

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

{/* Informações de Estoque */}
Estoque loja {product.stockLocal.toFixed(2) || 0} UN
Estoque disponível {product.stockAvailable?.toFixed(2) || product.stockLocal.toFixed(2) || 0}{" "} UN
Estoque geral {product.stockGeneral.toFixed(2) || 0} UN
{/* Parte inferior: Seletor de quantidade e botão adicionar */}
{/* Seletor de Quantidade */}
{ const val = parseFloat(e.target.value) || 1; const newQty = Math.max(1, val); onQuantityChange(newQty); }} 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={product.image || ""} productName={product.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(product, quantity, stockStore, deliveryType); setShowStoreDeliveryModal(false); }} product={product} quantity={quantity} />
); }; export default ProductListItem;