import React, { useState } from 'react' import { AppBar, Toolbar, IconButton, Typography, Button, Menu, MenuItem, Box, Chip, TextField } from '@mui/material' import MenuIcon from '@mui/icons-material/Menu' import SettingsIcon from '@mui/icons-material/Settings' import StorageIcon from '@mui/icons-material/Storage' import { useServers } from '../context/ServersContext' type HeaderProps = { onOpenSettings?: () => void onToggleSidebar?: () => void searchQuery?: string onSearchQueryChange?: (value: string) => void searchDisabled?: boolean } export default function Header({ onOpenSettings, onToggleSidebar, searchQuery = '', onSearchQueryChange, searchDisabled = false }: HeaderProps) { const { servers, activeServerId, setActiveServerId } = useServers() const [anchor, setAnchor] = useState(null) const active = servers.find((s) => s.id === activeServerId) const activeServerLabel = active ? active.name || active.host : 'No server configured' const handleOpen = (e: React.MouseEvent) => setAnchor(e.currentTarget) const handleClose = () => setAnchor(null) return ( onToggleSidebar && onToggleSidebar()} aria-label="menu" size="medium" sx={{ flexShrink: 0 }}> onSearchQueryChange && onSearchQueryChange(event.target.value)} disabled={searchDisabled} size="small" placeholder="Search library" sx={{ flex: { xs: '1 1 calc(100% - 104px)', sm: 1 }, minWidth: 0, maxWidth: { sm: 520 }, order: { xs: 1, sm: 0 }, '& .MuiInputBase-input': { fontSize: { xs: 14, sm: 13 }, py: 0.9 }, }} /> onOpenSettings && onOpenSettings()} aria-label="settings" size="medium" sx={{ width: 40, height: 40, flexShrink: 0, order: { xs: 2, sm: 0 } }}> {active?.lastTest && active.lastTest.ok === false && ( )} {servers.length === 0 ? ( No servers configured ) : ( servers.map((s) => ( { setActiveServerId(s.id) handleClose() }} > {s.name || s.host} )) )} { handleClose() onOpenSettings && onOpenSettings() }} > Manage servers... ) }