"use client"; import React, { useState, useRef, useEffect } from "react"; import { Search, ChevronDown, Menu, X, Pill, ShieldCheck, HeartPulse, Sparkles, ShoppingBag, User, PlusCircle, Check, Building2, LogIn, Wallet, LogOut, MapPin, FileHeart, Dog, Cat } from "lucide-react"; import { motion, AnimatePresence } from "motion/react"; import Link from "next/link"; import { useCartStore } from "../lib/store/cartStore"; import { usePetStore } from "../lib/store/usePetStore"; import { useUserStore } from "../lib/store/userStore"; import { useSettingsStore } from "../lib/store/settingsStore"; import { toast } from "sonner"; import HeaderButton from "./HeaderButton"; import AuthModal from "./AuthModal"; import { cn } from "../lib/utils"; import { productService } from "../lib/services/productService"; const MENU_ICONS: Record = { joints: , immune: , energy: , "special-care": , }; export default function Header({ onNavigate, onShopNavigate, currentView, onCartOpen, onSearch, onB2BOpen }: { onNavigate: (v: any) => void, onShopNavigate: (c?: string, s?: string) => void, currentView: string, onCartOpen: () => void, onSearch: (q: string) => void, onB2BOpen: () => void }) { const [isMegaMenuOpen, setIsMegaMenuOpen] = useState(false); const [isSearchFocused, setIsSearchFocused] = useState(false); const [isAuthModalOpen, setIsAuthModalOpen] = useState(false); const [isPetSwitcherOpen, setIsPetSwitcherOpen] = useState(false); const [searchQuery, setSearchQuery] = useState(""); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); const [isMobileSolutionsOpen, setIsMobileSolutionsOpen] = useState(false); const [menuItems, setMenuItems] = useState<{ id: string; title: string; icon: React.ReactNode; solutions: string[]; }[]>([]); const petMenuRef = useRef(null); const { getTotalItems } = useCartStore(); const { pets, activePetId, setActivePet, getActivePet } = usePetStore(); const { role, isLoggedIn, logout, profile } = useUserStore(); const activePet = getActivePet(); const getText = useSettingsStore(state => state.getText); useEffect(() => { const loadNavFilters = async () => { try { const data = await productService.getNavigationFilters(); const mapped = data.map(item => ({ id: item.slug, title: item.name, icon: MENU_ICONS[item.slug] || , solutions: item.symptoms })); setMenuItems(mapped); } catch (e) { console.error("Failed to load navigation filters:", e); } }; loadNavFilters(); }, []); // Click Outside logic useEffect(() => { function handleClickOutside(event: MouseEvent) { if (petMenuRef.current && !petMenuRef.current.contains(event.target as Node)) { setIsPetSwitcherOpen(false); } } document.addEventListener("mousedown", handleClickOutside); return () => document.removeEventListener("mousedown", handleClickOutside); }, []); const handleSearch = (e: React.FormEvent) => { e.preventDefault(); if (searchQuery.trim()) { onSearch(searchQuery); setIsSearchFocused(false); } }; return ( <> setIsAuthModalOpen(false)} />
🚚 {getText('shipping_notice', "ارسال رایگان برای سفارش‌های بالای ۱۵۰ هزار تومان")}
{/* Mobile Menu Toggle */} {/* Logo Section */} setIsMobileMenuOpen(false)} >
C
Canina {getText('brand_name_fa', "ایران")} {getText('brand_subtitle', "نماینده رسمی Canina Pharma GmbH آلمان")}
{/* Navigation Items */} {/* Action Area */}
{/* Elastic Search */}
{isSearchFocused && (
setSearchQuery(e.target.value)} onBlur={() => !searchQuery && setIsSearchFocused(false)} placeholder="جستجوی محصولات، مقالات سلامت و غیره…" dir="rtl" className="w-full bg-transparent py-2 pr-4 text-[12px] font-black outline-none font-vazir text-medical-gray-900 text-right placeholder:text-medical-gray-400 placeholder:text-right" />
)}
{ if (isSearchFocused && searchQuery.trim()) { onSearch(searchQuery); setIsSearchFocused(false); } else { setIsSearchFocused(!isSearchFocused); } }} >
{isLoggedIn ? (
{/* User Name (Direct link to dashboard) */}
onNavigate("user-dashboard")} > {profile.firstName}
{/* Separator Line */}
{/* Pet Name & Switcher */}
setIsPetSwitcherOpen(!isPetSwitcherOpen)} > {activePet?.type === "گربه" ? ( ) : ( )} {activePet?.name || "بدون پت"}
{isPetSwitcherOpen && (
{getText('nav_pet_switcher_title', "تغییر پت یا مدیریت حساب")}
{pets.map(pet => (
{ setActivePet(pet.id); setIsPetSwitcherOpen(false); toast.success(`پت فعال به ${pet.name} تغییر یافت`); }} >
{pet.name[0]}
{pet.name}
{activePetId === pet.id && }
))}
)}
) : ( setIsAuthModalOpen(true)} icon={} > {getText('nav_login', "ورود / ثبت‌نام")} )} } >
{getText('nav_cart', "سبد خرید")}
{/* Mobile Drawer Menu */} {isMobileMenuOpen && ( <> {/* Backdrop */} setIsMobileMenuOpen(false)} className="fixed inset-0 bg-black z-40 lg:hidden" /> {/* Drawer */}
setIsMobileMenuOpen(false)}>
C
Canina
{/* Navigation Links */}
)}
); }