import React, { useState, useRef, useEffect } from 'react'; import { Checkpoint, PageKey, SaveStatus, useLanguage } from '../types'; interface SiteHeaderProps { currentPage: string; setPage: (page: 'home' | PageKey) => void; checkpoints: Checkpoint[]; onCreateCheckpoint: () => void; onRestoreCheckpoint: (id: string) => void; onDeleteCheckpoint: (id: string) => void; saveStatus: SaveStatus; onOpenAIGuide: () => void; } const SiteHeader: React.FC = ({ currentPage, setPage, checkpoints, onCreateCheckpoint, onRestoreCheckpoint, onDeleteCheckpoint, saveStatus, onOpenAIGuide }) => { const { language, setLanguage, t } = useLanguage(); const [isLangMenuOpen, setIsLangMenuOpen] = useState(false); const [isCheckpointMenuOpen, setIsCheckpointMenuOpen] = useState(false); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); const langMenuRef = useRef(null); const checkpointMenuRef = useRef(null); useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (langMenuRef.current && !langMenuRef.current.contains(event.target as Node)) { setIsLangMenuOpen(false); } if (checkpointMenuRef.current && !checkpointMenuRef.current.contains(event.target as Node)) { setIsCheckpointMenuOpen(false); } }; document.addEventListener('mousedown', handleClickOutside); return () => document.removeEventListener('mousedown', handleClickOutside); }, []); const handlePageChange = (page: 'home' | PageKey) => { setPage(page); window.scrollTo(0, 0); setIsMobileMenuOpen(false); } const navLinks = [ { key: 'home', text: t('header.home'), action: () => handlePageChange('home') }, { key: 'legal_drafter', text: t('header.aiAssistant'), action: () => handlePageChange('legal_drafter') }, { key: 'lawyer_finder', text: t('header.lawyerFinder'), action: () => handlePageChange('lawyer_finder') }, { key: 'notary_finder', text: t('header.notaryFinder'), action: () => handlePageChange('notary_finder') }, { key: 'news_summarizer', text: t('header.newsSummarizer'), action: () => handlePageChange('news_summarizer') }, { key: 'web_analyzer', text: t('header.webAnalyzer'), action: () => handlePageChange('web_analyzer') }, { key: 'document_analyzer', text: t('header.documentAnalyzer'), action: () => handlePageChange('document_analyzer') }, { key: 'legal_training', text: t('header.legalTraining'), action: () => handlePageChange('legal_training') }, { key: 'case_strategist', text: t('header.caseStrategist'), action: () => handlePageChange('case_strategist') }, ]; const SaveStatusIndicator: React.FC = () => { let text: string | null = null; let icon: React.ReactNode = null; let key: string = saveStatus; switch (saveStatus) { case 'saving': text = 'در حال ذخیره...'; icon = ; break; case 'saved': text = 'ذخیره شد'; icon = ; key = `${saveStatus}-${Date.now()}`; // Force re-render for animation break; default: return null; } return (
{icon} {text}
); }; return (
{/* Left side: Logo and Desktop Nav */} {/* Right side: Actions */}
{/* Checkpoint Controls - Desktop */}
{isCheckpointMenuOpen && (
{t('header.projectHistory')}
{checkpoints.length > 0 ? (
    {checkpoints.map(ckpt => (
  • {ckpt.name}
  • ))}
) : (
{t('header.noCheckpoints')}
)}
)}
{/* AI Guide / Search Icon */} {/* Mobile Hamburger Menu */}
{isMobileMenuOpen && (
{navLinks.map(link => ( ))}
)}
); }; export default SiteHeader;