'use client' import Link from 'next/link' import Image from 'next/image' import { Menu, X, Moon, Sun } from 'lucide-react' import { useState, useEffect } from 'react' import { useTerminal } from '@/lib/TerminalContext' import { useLanguage } from '@/lib/LanguageContext' import { CIStatusIndicator } from './CIStatusIndicator' export default function Header() { const [open, setOpen] = useState(false) const [dark, setDark] = useState(false) const [skillsOpen, setSkillsOpen] = useState(false) const [contactOpen, setContactOpen] = useState(false) const [educationOpen, setEducationOpen] = useState(false) const { isOpen: terminalOpen, setIsOpen: setTerminalOpen } = useTerminal() const { lang, setLang, t } = useLanguage() const [copied, setCopied] = useState(null) const handleCopy = (text: string, label: string) => { navigator.clipboard.writeText(text) setCopied(label) setTimeout(() => setCopied(null), 2000) } const toggleLang = () => { setLang(lang === 'en' ? 'zh' : 'en') } useEffect(() => { const stored = localStorage.getItem('theme') const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches const isDark = stored === 'dark' || (!stored && prefersDark) if (isDark) { document.documentElement.classList.add('dark') } else { document.documentElement.classList.remove('dark') } setDark(isDark) }, []) const toggleDark = () => { const newDark = !dark if (newDark) { document.documentElement.classList.add('dark') localStorage.setItem('theme', 'dark') } else { document.documentElement.classList.remove('dark') localStorage.setItem('theme', 'light') } setDark(newDark) } return (
Profile
{t.header.title}
{t.header.subtitle}
{/* Mobile Language Toggle */}
{open && (
{t.header.nav.home} {skillsOpen && (
{Object.entries(t.header.skills).map(([key, category]) => (
{(category as {title: string}).title}
{(category as {items: string[]}).items.map((skill) => ( {skill} ))}
))}
)} {contactOpen && (
{t.header.contact.portfolio}
{t.header.contact.github}
{t.header.contact.privateGithub}
{t.header.contact.linkedin}
{t.header.contact.email}
)}
{t.header.experience}
{t.header.experienceValue}
{educationOpen && (

{t.header.educationDetails.bachelor.school}

{t.header.educationDetails.bachelor.degree}

{t.header.educationDetails.bachelor.period}

{t.header.educationDetails.master.school}

{t.header.educationDetails.master.degree}

{t.header.educationDetails.master.period}

)}
)}
) }