import { Box, IconButton, TextField, Typography } from '@mui/material'
import { SendHorizonal } from 'lucide-react'
import { AgentAvatar } from './AgentAvatar'
import { AGENT_CHAT_MARKER, useAgentChat } from './useAgentChat'
import { AGENT_CHAT_PROMPT_SHORT } from '../../lib/constants'
import { DS_BORDER, DS_TEXT } from '../../lib/ds'
import { useAgentChatStore } from '../../stores/agentChatStore'
/**
* Kompakter Chatzustand im obersten globalen Balken (Runde 5, §5).
*
* Er erscheint, sobald der ausführliche Chatkopf der Agentenseite nach oben
* weggescrollt ist, und zeigt nebeneinander Porträt, Name, Frage und
* Eingabefeld. Er liegt im Balken zwischen Seitenmenü und Mandant/Konto und
* nicht als Schwebeleiste über der Seite — so kann er Tabellen, Filter und
* Seitennavigation gar nicht erst verdecken (§10).
*
* Ohne eigenen Eingabezustand: Text, Fokus und Agent kommen aus
* `agentChatStore`, damit der Wechsel zwischen beiden Zuständen mitten im
* Tippen nichts verliert.
*/
export function AgentChatStickyBar() {
const compact = useAgentChatStore(s => s.compact)
const agent = useAgentChatStore(s => s.agent)
// Der Inhalt ist eine eigene Komponente, damit `useAgentChat` erst dann
// montiert wird, wenn der kompakte Zustand tatsächlich sichtbar ist. Läge der
// Aufruf hier, liefe sein Fokuseffekt schon beim Start der Anwendung ins Leere
// und der Fokus bliebe beim Scrollen im weggescrollten Feld hängen.
if (!agent || !compact) return null
return
}
function StickyChat() {
const { agent, draft, inputRef, setDraft, send, handleKeyDown, onFocus, onBlur } = useAgentChat()
if (!agent) return null
return (
{agent.name}
{/*
Bei engen Breiten verschwindet zuerst der Hilfstext, danach schrumpft das
Eingabefeld (§10). Porträt und Name bleiben in jeder Breite stehen —
ohne sie wüsste niemand mehr, mit wem er schreibt.
*/}
{AGENT_CHAT_PROMPT_SHORT}
setDraft(e.target.value)}
onKeyDown={handleKeyDown}
onFocus={onFocus}
onBlur={onBlur}
inputRef={inputRef}
placeholder={`Nachricht an ${agent.name}`}
aria-label={`Nachricht an ${agent.name}`}
sx={{
flex: 1,
minWidth: 120,
'& .MuiOutlinedInput-root': {
borderRadius: 5,
bgcolor: 'white',
fontSize: '0.8125rem',
pr: 0.5,
'& fieldset': { borderColor: DS_BORDER.default },
},
}}
slotProps={{
input: {
endAdornment: (
),
},
}}
/>
)
}