'use client'; import { useState, useCallback } from 'react'; import Image from 'next/image'; import { ChatDropdownMenu, type DropdownMenuItem } from './ChatDropdownMenu'; interface ChatHeaderProps { name: string; role: string; lastSeen: string; avatar: string; isOnline?: boolean; pronouns?: string; expertise?: string[]; isTyping?: boolean; typingText?: string; onClearChat?: () => void; onDeleteConversation?: () => void; } export function ChatHeader({ name, role, lastSeen, avatar, isOnline = false, pronouns, expertise = [], isTyping = false, typingText, onClearChat, onDeleteConversation, }: ChatHeaderProps) { const [isMenuOpen, setIsMenuOpen] = useState(false); const [isMuted, setIsMuted] = useState(false); const [avatarLoaded, setAvatarLoaded] = useState(false); const placeholder = '/assets/icons/user-placeholder-icon.svg'; const isPlaceholderAvatar = !avatar || avatar === placeholder; const menuItems: DropdownMenuItem[] = [ { label: 'Clear Chat', onClick: () => onClearChat?.(), }, { label: isMuted ? 'Unmute Notifications' : 'Mute Notifications', onClick: () => setIsMuted((prev) => !prev), }, { label: 'Report User', onClick: () => { // Placeholder — no backend endpoint yet }, }, { label: 'Delete Conversation', onClick: () => onDeleteConversation?.(), danger: true, }, ]; const handleToggleMenu = useCallback(() => { setIsMenuOpen((prev) => !prev); }, []); const handleCloseMenu = useCallback(() => { setIsMenuOpen(false); }, []); return (
{/* Top row - Name, status, actions */}

{name}

{role} {isTyping ? ( {typingText} ) : ( lastSeen )}
{/* User profile row */}
{/* Avatar */}
{(!avatar || !avatarLoaded || isPlaceholderAvatar) && ( {name} )} {avatar && !isPlaceholderAvatar && ( {name} setAvatarLoaded(true)} /> )}
{isOnline && (
)}
{/* User info */}
{name} Verified {pronouns && ( ({pronouns}) )}
{/* Expertise tags */} {expertise.length > 0 && (
{expertise.map((tag, index) => ( {tag} {index < expertise.length - 1 && ( | )} ))}
)}
); }