'use client'; import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Button } from '@/components/ui/button'; import { User } from '@/lib/session'; import { fetchPreferences, fetchReminderSettings, saveReminderSettings, ReminderSettings, UserPreferences } from '@/lib/storage'; import { useNotifications } from '@/hooks/useNotifications'; import { useEffect, useState } from 'react'; import { useRouter } from 'next/navigation'; import { Cigarette, Leaf, LogOut, Home, ChevronDown, Sun, Moon, Bell, BellOff, BellRing, Menu } from 'lucide-react'; import { useTheme } from '@/lib/theme-context'; interface UserHeaderProps { user: User; preferences?: UserPreferences | null; } export function UserHeader({ user, preferences }: UserHeaderProps) { const [userName, setUserName] = useState(null); const [reminderSettings, setReminderSettings] = useState({ enabled: false, reminderTime: '09:00' }); const [showReminderDialog, setShowReminderDialog] = useState(false); const [localTime, setLocalTime] = useState('09:00'); const router = useRouter(); const { theme, toggleTheme } = useTheme(); const { isSupported, permission, requestPermission } = useNotifications(reminderSettings); useEffect(() => { const loadData = async () => { // If preferences passed from parent, use them. Otherwise fetch. /* eslint-disable-next-line @typescript-eslint/no-unused-vars */ const [prefs, reminders] = await Promise.all([ preferences ? Promise.resolve(preferences) : fetchPreferences(), fetchReminderSettings(), ]); if (prefs) { setUserName(prefs.userName); } setReminderSettings(reminders); setLocalTime(reminders.reminderTime); }; loadData(); }, [preferences]); const handleToggleReminders = async () => { if (!reminderSettings.enabled && permission !== 'granted') { const result = await requestPermission(); if (result !== 'granted') return; } const newSettings = { ...reminderSettings, enabled: !reminderSettings.enabled }; setReminderSettings(newSettings); await saveReminderSettings(newSettings); }; const handleTimeChange = async (newTime: string) => { setLocalTime(newTime); const newSettings = { ...reminderSettings, reminderTime: newTime }; setReminderSettings(newSettings); await saveReminderSettings(newSettings); }; const initials = [user.firstName?.[0], user.lastName?.[0]] .filter(Boolean) .join('') .toUpperCase() || user.email[0].toUpperCase(); const handleLogout = () => { window.location.href = '/api/auth/logout'; }; const handleNavigate = (path: string) => { router.push(path); }; return (

handleNavigate('/')} style={{ background: 'linear-gradient(135deg, #a78bfa 0%, #818cf8 50%, #6366f1 100%)', WebkitBackgroundClip: 'text', WebkitTextFillColor: 'transparent', backgroundClip: 'text', }} > QuitTraq

{userName && (

Welcome {userName}, you got this!

)}
{/* Main Navigation Menu */} handleNavigate('/')}> Dashboard handleNavigate('/track/nicotine')}> Track Nicotine Usage handleNavigate('/track/marijuana')}> Track Marijuana Usage handleNavigate('/')}> Dashboard Sign out
{userName && (

Welcome {userName}, you got this!

)} {/* Reminder Settings Dialog */} Daily Reminders
{/* Enable/Disable Toggle */}
{reminderSettings.enabled ? ( ) : ( )} {reminderSettings.enabled ? 'Reminders On' : 'Reminders Off'}
{/* Time Picker */} {reminderSettings.enabled && (
handleTimeChange(e.target.value)} />

You'll receive a reminder at this time each day

)} {/* Request Permission Button */} {isSupported && permission === 'default' && ( )} {/* Denied Message */} {permission === 'denied' && (

Notifications are blocked. Please enable them in your browser settings to receive reminders.

)}
); }