"use client"; import { CheckCircle2, RotateCcw, ShoppingBag, TriangleAlert, Truck, XCircle } from "lucide-react"; import Link from "next/link"; import { useState } from "react"; import { Button } from "@/components/ui/button"; import type { Product } from "@/lib/headless/types"; import { formatMoney, LOW_STOCK_THRESHOLD } from "@/lib/utils"; import { useCartStore } from "@/store/cart-store"; export function ProductPurchase({ product }: { product: Product }) { const [variantId, setVariantId] = useState(product.variants[0]?.id); const addItem = useCartStore((state) => state.addItem); const selectedVariant = product.variants.find((variant) => variant.id === variantId) ?? product.variants[0]; const outOfStock = selectedVariant?.available === false; const lowStock = !outOfStock && selectedVariant?.inventoryQuantity !== null && selectedVariant?.inventoryQuantity !== undefined && selectedVariant.inventoryQuantity > 0 && selectedVariant.inventoryQuantity <= LOW_STOCK_THRESHOLD ? selectedVariant.inventoryQuantity : null; return (
{product.variants.map((variant) => ( ))}
{formatMoney(product.price, product.currency)} {product.compareAtPrice && {formatMoney(product.compareAtPrice, product.currency)}}
{/* Visible tambien en mobile (antes quedaba oculto addItem(product, variantId)} > {outOfStock ? "Agotado" : "Añadir al carrito"}
{outOfStock ? ( Agotado ) : lowStock !== null ? ( Quedan {lowStock} unidades ) : ( Disponibilidad por confirmar )} Envíos nacionales
{/* Franja de confianza real (estilo Walmart) -- enlaza a las páginas reales de /envios y /cambios en vez de repetir texto suelto, con los datos reales que confirmó el usuario (5 días hábiles, envío de vuelta a cargo de ARI Shopping). Nada inventado: mismas políticas ya publicadas en el footer. */}
Envíos calculados en el checkout · ver detalles Cambios en 5 días hábiles, envío de vuelta gratis
); }