'use client'; import { useTheme } from '@/contexts/ThemeContext'; import { useJiraConfig } from '@/contexts/JiraConfigContext'; import { usePathname } from 'next/navigation'; import Link from 'next/link'; import { useState } from 'react'; import { Theme, THEME_CONFIG, getThemeIcon } from '@/lib/ui-config'; import { useKeyboardShortcutsModal } from '@/contexts/KeyboardShortcutsContext'; import { AuthButton } from '@/components/AuthButton'; import { useSession, signOut } from 'next-auth/react'; interface HeaderProps { title?: string; subtitle?: string; syncing?: boolean; } export function Header({ title = "TowerControl", subtitle = "Task Management", syncing = false }: HeaderProps) { const { theme, setTheme } = useTheme(); const { isConfigured: isJiraConfigured, config: jiraConfig } = useJiraConfig(); const pathname = usePathname(); const [mobileMenuOpen, setMobileMenuOpen] = useState(false); const [themeDropdownOpen, setThemeDropdownOpen] = useState(false); const { openModal: openShortcutsModal } = useKeyboardShortcutsModal(); const { data: session } = useSession(); // Liste des thèmes disponibles avec leurs labels et icônes const themes: { value: Theme; label: string; icon: string }[] = THEME_CONFIG.allThemes.map(themeValue => { return { value: themeValue, label: themeValue.charAt(0).toUpperCase() + themeValue.slice(1).replace('_', ' '), icon: getThemeIcon(themeValue) }; }); // Fonction pour déterminer si un lien est actif const isActiveLink = (href: string) => { if (href === '/') { return pathname === '/'; } return pathname.startsWith(href); }; // Fonction pour obtenir les classes CSS d'un lien (desktop) const getLinkClasses = (href: string) => { const baseClasses = "font-mono text-sm uppercase tracking-wider transition-colors px-3 py-1.5 rounded-md"; if (isActiveLink(href)) { return `${baseClasses} text-[var(--primary)] bg-[var(--primary)]/10 border border-[var(--primary)]/30`; } return `${baseClasses} text-[var(--muted-foreground)] hover:text-[var(--primary)] hover:bg-[var(--card-hover)]`; }; // Fonction pour obtenir les classes CSS d'un lien (mobile) const getMobileLinkClasses = (href: string) => { const baseClasses = "font-mono text-sm uppercase tracking-wider transition-colors px-4 py-3 rounded-md block w-full text-left"; if (isActiveLink(href)) { return `${baseClasses} text-[var(--primary)] bg-[var(--primary)]/10 border border-[var(--primary)]/30`; } return `${baseClasses} text-[var(--muted-foreground)] hover:text-[var(--primary)] hover:bg-[var(--card-hover)]`; }; // Liste des liens de navigation const navLinks = [ { href: '/', label: 'Dashboard' }, { href: '/kanban', label: 'Kanban' }, { href: '/daily', label: 'Daily' }, { href: '/weekly-manager', label: 'Weekly' }, ...(isJiraConfigured ? [{ href: '/jira-dashboard', label: `Jira${jiraConfig?.projectKey ? ` (${jiraConfig.projectKey})` : ''}` }] : []), { href: '/settings', label: 'Settings' } ]; return (
{/* Layout mobile/tablette */}
{/* Titre et status */}

{title}

{subtitle}

{/* Controls mobile/tablette */}
{/* Keyboard Shortcuts */} {/* Theme Dropdown */}
{themeDropdownOpen && ( <> {/* Backdrop */}
setThemeDropdownOpen(false)} /> {/* Dropdown */}
{themes.map((themeOption) => ( ))}
)}
{/* Menu burger */}
{/* Auth controls à droite mobile */}
{/* Layout desktop - une seule ligne comme avant */}
{/* Titre et status */}

{title}

{subtitle}

{/* Navigation desktop */}
{/* Contrôles à droite */}
{/* Menu mobile/tablette en modal */} {mobileMenuOpen && (
{/* Backdrop */}
setMobileMenuOpen(false)} /> {/* Modal content */}
)}
); }