import { useState } from 'react';
import { Link, useNavigate } from 'react-router-dom';
import { useAuthStore } from '@/features/auth/store/authStore';
import { useUser } from '@/features/auth/hooks/useUser';
import { useUIStore } from '@/stores/ui';
import { useTranslation } from '@/hooks/useTranslation';
import { EmailVerificationBadge } from '@/features/auth/components/EmailVerificationBadge';
import { NotificationMenu } from '@/components/notifications/NotificationMenu';
import { GlobalSearchBar } from '@/components/search/GlobalSearchBar';
import { RateLimitIndicator } from '@/components/RateLimitIndicator';
import { Button } from '@/components/ui/button';
import { FocusTrap } from '@/components/ui/focus-trap';
import { Tooltip } from '@/components/ui/tooltip';
import { cn } from '@/lib/utils';
import {
User,
Settings,
LogOut,
Moon,
Sun,
Monitor,
Search,
Cpu,
Menu,
} from 'lucide-react';
import type { BaseComponentProps } from '../types';
/**
* Props for Header component
* FE-TYPE-013: Fully typed component props
*/
export interface HeaderProps extends BaseComponentProps {
// No additional props needed - uses global stores
}
export function Header(_props: HeaderProps) {
const [isUserMenuOpen, setIsUserMenuOpen] = useState(false);
const { logout } = useAuthStore();
const { data: user } = useUser();
const { theme, setTheme, sidebarOpen, setSidebarOpen } = useUIStore();
const { t } = useTranslation();
const navigate = useNavigate();
const handleLogout = async () => {
await logout();
navigate('/login');
};
const toggleTheme = () => {
const newTheme =
theme === 'light' ? 'dark' : theme === 'dark' ? 'system' : 'light';
setTheme(newTheme);
};
const getThemeIcon = () => {
switch (theme) {
case 'light':
return ;
case 'dark':
return ;
default:
return ;
}
};
return (
{/* Bouton toggle sidebar pour mobile */}
VezaOS
Core Network v2.4
{/* HUD System Status */}
Uplink Status
Connected
Node ID
VZ-{user?.id?.slice(0, 4)}
{/* Global Search integrated */}
{/* FIX: L'icône Search est déjà dans le composant Search, pas besoin de la dupliquer */}
{/* FIX: z-index élevé pour que le dropdown de recherche soit au-dessus de tout */}