import React, { useState, useEffect, useRef } from 'react'; import { useAuth } from '../context/AuthContext'; import { AuthModal } from './AuthModal'; interface HeaderProps { currentView: 'home' | 'workspace' | 'my-filings'; onNavigate: (view: 'home' | 'workspace' | 'my-filings') => void; selectedCity: string; onSelectCity: (city: string) => void; unreadNotifications?: number; filingsCount?: number; } export const CITIES = [ 'Delhi (NCR)', 'Bengaluru', 'Mumbai', 'Chennai', 'Hyderabad', 'Kolkata', 'Pune', 'Ahmedabad', 'Jaipur', 'Chandigarh', ]; export const Header: React.FC = ({ currentView, onNavigate, selectedCity, onSelectCity, unreadNotifications = 2, filingsCount = 0, }) => { const { user, loading, signOut, sendVerificationEmail, reloadUser } = useAuth(); const [showCityMenu, setShowCityMenu] = useState(false); const [showNotificationMenu, setShowNotificationMenu] = useState(false); const [showProfileMenu, setShowProfileMenu] = useState(false); const [showAuthModal, setShowAuthModal] = useState(false); const [authWorking, setAuthWorking] = useState(false); const [verifSent, setVerifSent] = useState(false); const [verifError, setVerifError] = useState(null); const cityMenuRef = useRef(null); const notificationMenuRef = useRef(null); const profileMenuRef = useRef(null); const handleSendVerification = async () => { setVerifError(null); setVerifSent(false); try { await sendVerificationEmail(); setVerifSent(true); setTimeout(() => setVerifSent(false), 5000); } catch (err: any) { setVerifError(err?.message || 'Could not send verification email.'); } }; const handleCheckVerification = async () => { try { await reloadUser(); } catch (err) { console.warn('Could not reload user status:', err); } }; useEffect(() => { const handleClickOutside = (event: MouseEvent) => { const target = event.target as Node; if (cityMenuRef.current && !cityMenuRef.current.contains(target)) { setShowCityMenu(false); } if (notificationMenuRef.current && !notificationMenuRef.current.contains(target)) { setShowNotificationMenu(false); } if (profileMenuRef.current && !profileMenuRef.current.contains(target)) { setShowProfileMenu(false); } }; const handleKeyDown = (event: KeyboardEvent) => { if (event.key === 'Escape') { setShowCityMenu(false); setShowNotificationMenu(false); setShowProfileMenu(false); } }; document.addEventListener('mousedown', handleClickOutside); window.addEventListener('keydown', handleKeyDown); return () => { document.removeEventListener('mousedown', handleClickOutside); window.removeEventListener('keydown', handleKeyDown); }; }, []); const handleSignOut = async () => { setAuthWorking(true); try { await signOut(); setShowProfileMenu(false); } catch (err) { console.error('Sign-out error:', err); } finally { setAuthWorking(false); } }; return ( <>
{/* Brand & City Selector */}
{showCityMenu && (
Select Jurisdiction
{CITIES.map((city) => ( ))}
)}
{/* Clean Single Navigation Link */} {/* Notifications & Profile */}
{showNotificationMenu && (
Filing Alerts 2 Active
timer Statutory Clock Notice

Agency response required within 18 statutory calendar days.

cloud_done Firebase Real-time Storage

Your filings are synced automatically with zero data loss.

)}
{loading ? (
) : user ? (
{showProfileMenu && (
User
{user.displayName || 'Citizen User'}
{user.email || 'citizen@caseloop.app'}
{user.email && (
Email Status {user.emailVerified ? ( verified Verified ) : ( pending Unverified )}
{!user.emailVerified && (
{verifError && (

{verifError}

)}
)}
)}
)}
) : ( )}
setShowAuthModal(false)} /> ); };