import { Box, Button, CircularProgress, IconButton, TextField, Typography } from '@mui/material' import { ArrowLeft, FileText, Paperclip, Send, X } from 'lucide-react' import { useOfferWizardStore } from '../../stores/offerWizardStore' import { useSendOffer } from '../../hooks/useOffers' import { useToastStore } from '../../stores/toastStore' import { AiOfferEmailButton } from './AiOfferEmailButton' import { mockProperties } from '../../mock-data/properties' import { deterministicMatchScore } from './latentNeedUtils' import { formatFileSize } from './inquiryUtils' export function OfferChatComposer() { const subject = useOfferWizardStore(s => s.messageSubject) const body = useOfferWizardStore(s => s.messageDraft) const setSubject = useOfferWizardStore(s => s.setMessageSubject) const setBody = useOfferWizardStore(s => s.setMessageDraft) const attachments = useOfferWizardStore(s => s.attachments) const addAttachment = useOfferWizardStore(s => s.addAttachment) const removeAttachment = useOfferWizardStore(s => s.removeAttachment) const offerDraftId = useOfferWizardStore(s => s.offerDraftId) const selectedPropertyIds = useOfferWizardStore(s => s.selectedPropertyIds) const needId = useOfferWizardStore(s => s.selectedNeedId) const needTitle = useOfferWizardStore(s => s.needTitle) const setStep = useOfferWizardStore(s => s.setStep) const reset = useOfferWizardStore(s => s.reset) const sendOffer = useSendOffer() const showToast = useToastStore(s => s.showToast) const propertyTitles = selectedPropertyIds.map(id => { const p = mockProperties.find(pp => pp.id === id) return p?.title ?? id }) const scores = needId ? selectedPropertyIds.map(id => deterministicMatchScore(id, needId)) : [] const handleAiGenerated = (newSubject: string, newBody: string) => { setSubject(newSubject) setBody(newBody) showToast('KI-Vorschlag eingefügt', 'success') } const handleAddAttachment = () => { addAttachment({ id: crypto.randomUUID(), fileName: `Anhang_${attachments.length + 1}.pdf`, fileType: 'application/pdf', fileSize: 200_000 + Math.floor(Math.random() * 600_000), }) } const handleSend = async () => { if (!offerDraftId) return if (!body.trim()) { showToast('Bitte Nachricht eingeben', 'warning') return } const res = await sendOffer.mutateAsync(offerDraftId) if (res.error) { showToast(`Fehler: ${res.error}`, 'error') return } showToast('Angebot erfolgreich gesendet', 'success') reset() } return ( Empfänger-Kontext Bedarf: {needTitle} · {selectedPropertyIds.length} Objekt {selectedPropertyIds.length === 1 ? '' : 'e'} im Angebot setSubject(e.target.value)} /> setBody(e.target.value)} multiline rows={8} /> {attachments.length > 0 && ( Anhänge {attachments.map(a => ( {a.fileName} {a.generated && ( PDF )} {formatFileSize(a.fileSize)} removeAttachment(a.id)} sx={{ p: 0.25 }}> ))} )} ) }