import { Bot, Loader2, Send, Square, User, Zap, Paperclip, X, FileIcon } from 'lucide-react' import clsx from 'clsx' import { useRef, useState } from 'react' import { getAttachedFileAccountIds } from './fileAccountBinding' export default function ChatPanel({ t, message, setMessage, attachedFiles = [], setAttachedFiles, setSelectedAccount, effectiveKey, selectedAccount, model, onMessage, response, isStreaming, loading, streamingThinking, streamingContent, onRunTest, onStopGeneration, hasAvailableModel, }) { const fileInputRef = useRef(null) const [uploadingFiles, setUploadingFiles] = useState(false) const handleFileSelect = async (e) => { const files = Array.from(e.target.files) if (files.length === 0) return if (!effectiveKey) { onMessage('error', t('apiTester.missingApiKey') || 'Missing API Key') return } setUploadingFiles(true) const initialSelectedAccount = String(selectedAccount || '').trim() const selectedModel = String(model || '').trim() let boundAccount = initialSelectedAccount for (const file of files) { const formData = new FormData() formData.append('file', file) formData.append('purpose', 'assistants') if (selectedModel) { formData.append('model', selectedModel) } const headers = { 'Authorization': `Bearer ${effectiveKey}`, } if (boundAccount) { headers['X-Ds2-Target-Account'] = boundAccount } try { const res = await fetch('/v1/files', { method: 'POST', headers, body: formData }) if (!res.ok) { const err = await res.text() onMessage('error', err || 'File upload failed') continue } const data = await res.json() setAttachedFiles(prev => [...prev, data]) const uploadedAccount = String(data?.account_id || '').trim() if (!boundAccount && uploadedAccount) { boundAccount = uploadedAccount } } catch (error) { onMessage('error', error.message || 'Network error during upload') } } setUploadingFiles(false) if (!initialSelectedAccount && boundAccount && setSelectedAccount) { setSelectedAccount(boundAccount) } if (fileInputRef.current) { fileInputRef.current.value = '' } } const removeFile = (id) => { setAttachedFiles(prev => prev.filter(f => f.id !== id)) } const attachmentAccountIds = getAttachedFileAccountIds(attachedFiles) const attachmentAccountId = attachmentAccountIds.length === 1 ? attachmentAccountIds[0] : '' return (