import { useEffect, useRef, useState } from 'react'; import { Link, useLocation, useNavigate } from 'react-router-dom'; import { motion, AnimatePresence } from 'framer-motion'; import { useAuth } from '@/hooks/useAuth'; import { APP_NAME } from '@/utils/constants'; import { ClipboardList, LogOut, Moon, Sun, User } from 'lucide-react'; import { MOTION_DURATION, MOTION_EASE, fastTransition } from '@/lib/motion'; import { useTheme } from '@/hooks/useTheme'; /** * Minimal top shell: product mark + profile menu (Course Status, Logout). * Replaces the former bottom navigation. */ export function AppHeader() { const { isAuthenticated, signOut, isGuest } = useAuth(); const { toggleTheme, isDark } = useTheme(); const navigate = useNavigate(); const location = useLocation(); const [menuOpen, setMenuOpen] = useState(false); const [showLogoutConfirm, setShowLogoutConfirm] = useState(false); const menuRef = useRef(null); const isAuthPage = location.pathname === '/login' || location.pathname === '/signup'; useEffect(() => { setMenuOpen(false); }, [location.pathname]); useEffect(() => { if (!menuOpen) return; const onPointerDown = (event: MouseEvent) => { if (menuRef.current && !menuRef.current.contains(event.target as Node)) { setMenuOpen(false); } }; document.addEventListener('mousedown', onPointerDown); return () => document.removeEventListener('mousedown', onPointerDown); }, [menuOpen]); const handleSignOut = async () => { await signOut(); setShowLogoutConfirm(false); setMenuOpen(false); navigate('/login', { replace: true }); }; if (isAuthPage || (!isAuthenticated && !isGuest)) { return null; } return ( <>
{APP_NAME}
setMenuOpen((open) => !open)} whileHover={{ scale: 1.05 }} whileTap={{ scale: 0.96 }} transition={fastTransition} className="inline-flex h-9 w-9 items-center justify-center rounded-full border border-cyan-200 bg-white text-cyan-700 shadow-sm transition-colors hover:border-cyan-500 hover:text-cyan-800 dark:border-neon-cyan/40 dark:bg-background/70 dark:text-neon-cyan dark:shadow-none dark:hover:border-neon-cyan dark:hover:text-neon-cyan dark:hover:shadow-glow-sm" aria-label="منوی پروفایل" aria-expanded={menuOpen} aria-haspopup="menu" > {menuOpen && ( setMenuOpen(false)} > وضعیت دوره )}
{showLogoutConfirm && (

خروج از حساب کاربری

آیا مطمئن هستید که می‌خواهید خارج شوید؟

)} ); }