"use client"; import { useState, useEffect, useMemo } from "react"; import { Product } from "../lib/data/products"; import { usePetStore } from "../lib/store/usePetStore"; import { productService } from "../lib/services/productService"; import { motion } from "motion/react"; import { Eye, ShoppingCart, Heart, AlertCircle, Sparkles, Dog, Cat } from "lucide-react"; import SafeImage from "./SafeImage"; import { ProductCardSkeleton } from "./Skeleton"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useSettingsStore } from "../lib/store/settingsStore"; import { useCartStore } from "../lib/store/cartStore"; import { toast } from "sonner"; import { useCatalogMode } from "../lib/useCatalogMode"; import { isSuitableForDog, isSuitableForCat, isSuitableForBoth, isSpeciesCompatible, matchesMedicalSymptom } from "../lib/petCompatibility"; function ProductCard({ product, priority = false }: { product: Product; priority?: boolean }) { const router = useRouter(); const { getText } = useSettingsStore(); const { getActivePet } = usePetStore(); const activePet = getActivePet(); const { addItem } = useCartStore(); const { showPrices, allowCart, showPreorderBtn } = useCatalogMode(); const nameFa = product.nameFa || product.name; const nameEn = product.nameEn || ""; const forDog = isSuitableForDog(product.suitableFor); const forCat = isSuitableForCat(product.suitableFor); const forBoth = isSuitableForBoth(product.suitableFor) || (forDog && forCat); const compatibility = useMemo(() => { if (!activePet) return null; const petType = activePet.type || 'سگ'; const sameSpecies = isSpeciesCompatible(product.suitableFor, petType); const matchedSymptom = matchesMedicalSymptom(activePet.medicalConditions, product.symptoms, product.benefits); if (!sameSpecies) return { type: "alert", text: `مخصوص ${product.suitableFor || 'پت'}` }; if (matchedSymptom) return { type: "success", text: `توصیه شده برای ${matchedSymptom} ${activePet.name || 'پت شما'}` }; return { type: "neutral", text: `مناسب برای ${activePet.name || 'پت شما'}` }; }, [product, activePet]); return ( router.push(`/shop/${product.slug || product.id}`)} className="group bg-white/90 backdrop-blur-md rounded-2xl sm:rounded-3xl border border-medical-gray-200/80 overflow-hidden hover:shadow-xl hover:shadow-canina-blue/10 hover:border-canina-blue/30 transition-all duration-300 flex flex-col cursor-pointer relative w-full" > {/* Category Badge */}
{product.category}
{/* Compatibility Tag */} {compatibility && (
{compatibility.type === "alert" ? ( forBoth ? ( ) : forCat ? ( ) : forDog ? ( ) : ( ) ) : compatibility.type === "success" ? ( ) : ( )} {compatibility.text}
)} {/* Image Container */}
{/* Species Badges (Dog / Cat) */}
{forDog && (
)} {forCat && (
)}
{/* Hover Actions for desktop */}
{ e.stopPropagation(); router.push(`/shop/${product.slug || product.id}`); }} className="w-10 h-10 rounded-full bg-white text-canina-blue flex items-center justify-center hover:scale-110 transition-transform shadow-lg cursor-pointer" title="مشاهده جزئیات" >
{allowCart && (product.packageSize !== undefined && product.packageSize !== null ? Number(product.packageSize) : 100) > 0 && (
{ e.stopPropagation(); addItem(product, 1); toast.success(`${nameFa} به سبد خرید اضافه شد.`); }} className="w-10 h-10 rounded-full bg-canina-blue text-white flex items-center justify-center hover:scale-110 transition-transform shadow-lg border border-white/20 cursor-pointer" title="افزودن به سبد خرید" >
)}
{/* Content */}
{/* Dual-language Name */}

{nameFa}

{nameEn && ( {nameEn} )}
{/* Short description */}

{product.shortDescription || (product.description ? product.description.replace(/<[^>]*>/g, '') : '')}

{/* Footer: Price + CTA */}
{showPrices ? (typeof product.price === 'string' || typeof product.price === 'number' ? String(product.price) : 'تماس بگیرید') : 'تماس بگیرید'}
{showPreorderBtn ? ( ثبت پیش‌خرید ) : ( {getText("product_view_details", "مشاهده جزئیات")} )}
); } export default function FeaturedProducts() { const router = useRouter(); const getText = useSettingsStore((state) => state.getText); const [products, setProducts] = useState([]); const [isLoading, setIsLoading] = useState(true); useEffect(() => { productService.getFeaturedProducts() .then(setProducts) .catch(() => toast.error("خطا در دریافت لیست محصولات از سرور.")) .finally(() => setIsLoading(false)); }, []); return (
{getText("featured_badge", "بیشترین انتخاب توسط دامپزشکان")}

{getText("featured_title_line1", "محصولات برگزیده و راهکارهای")}{" "} {getText("featured_title_line2", "درمان تخصصی")}

{getText("featured_view_all", "مشاهده تمامی محصولات")} ←
{isLoading ? ( Array.from({ length: 4 }).map((_, i) => (
)) ) : products.length > 0 ? ( products.map((p, i) => (
)) ) : (

{getText("featured_no_products_title", "هیچ محصولی یافت نشد")}

{getText("featured_no_products_desc", "در حال حاضر هیچ محصول برجسته‌ای برای نمایش وجود ندارد.")}

)}
); }