import { Button } from "@/components/ui/button"; import { AuthUser } from "@/services/authService"; import { useTheme } from "@/contexts/ThemeContext"; import { Moon, PanelLeft, PanelLeftClose, Sun, Globe, FileText, Github, Twitter, MessageSquare, Bell, User, Settings, LogOut } from "lucide-react"; import { useLanguage } from "@/contexts/LanguageContext"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, DropdownMenuSeparator } from "@/components/ui/dropdown-menu"; import { useEffect, useState } from "react"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { useNavigate } from "react-router-dom"; import { useSystemSettings } from "@/hooks/useSystemSettings"; interface HeaderProps { currentUser: AuthUser | null; onLogout: () => void; sidebarCollapsed: boolean; toggleSidebar: () => void; } export const Header = ({ currentUser, onLogout, sidebarCollapsed, toggleSidebar }: HeaderProps) => { const { theme, toggleTheme } = useTheme(); const { language, setLanguage, t } = useLanguage(); const [greeting, setGreeting] = useState(""); const { systemName } = useSystemSettings(); const navigate = useNavigate(); // Set greeting based on time of day useEffect(() => { const updateGreeting = () => { const hour = new Date().getHours(); if (hour >= 5 && hour < 12) { setGreeting(t("goodMorning")); } else if (hour >= 12 && hour < 18) { setGreeting(t("goodAfternoon")); } else { setGreeting(t("goodEvening")); } }; updateGreeting(); // Update greeting if language changes // You could add a timer to update the greeting throughout the day // but that's typically unnecessary since most sessions aren't active across time periods }, [language, t]); // Log avatar data for debugging useEffect(() => { if (currentUser) { //console.log("Avatar URL in Header:", currentUser.avatar); } }, [currentUser]); // Prepare avatar URL - ensure it displays correctly if it's a local profile image let avatarUrl = ''; if (currentUser?.avatar) { // If it's a relative path from the public folder, make sure it's resolved properly if (currentUser.avatar.startsWith('/upload/profile/')) { avatarUrl = currentUser.avatar; } else { avatarUrl = currentUser.avatar; } console.log("Final avatar URL:", avatarUrl); } return (
{/* Grid Pattern Overlay - Similar to StatusCards */}
{/* Header Content */}

{greeting}, {currentUser?.name || currentUser?.email?.split('@')[0] || 'User'} 👋 ✨

setLanguage("en")} className={language === "en" ? "bg-accent" : ""}> {t("english")} setLanguage("km")} className={language === "km" ? "bg-accent" : ""}> {t("khmer")} setLanguage("de")} className={language === "de" ? "bg-accent" : ""}> {t("Deutsch")} setLanguage("ko")} className={language === "ko" ? "bg-accent" : ""}> {t("korean")} setLanguage("ja")} className={language === "ja" ? "bg-accent" : ""}> {t("japanese")} setLanguage("zhcn")} className={language === "zhcn" ? "bg-accent" : ""}> {t("simplifiedChinese")} {/* Documentation */} {/* GitHub */} {/* X (Twitter) */} {/* Discord */} {/* Notifications */} {/* User Profile Dropdown */} {avatarUrl ? : {currentUser?.name?.[0] || currentUser?.email?.[0] || 'U'} }
{avatarUrl ? : {currentUser?.name?.[0] || currentUser?.email?.[0] || 'U'} }
{currentUser?.name || 'User'} {currentUser?.email}
navigate("/profile")}> {t("profile")} navigate("/settings")}> {t("settings")} {t("logout")}
); };