'use client'; import { useState, useRef, useEffect } from 'react'; import { Modal } from '@/components/ui'; interface Props { isOpen: boolean; onClose: () => void; } interface Message { role: 'user' | 'assistant' | 'system'; content: string; ts: number; } export default function AIAgentModal({ isOpen, onClose }: Props) { const [messages, setMessages] = useState([{ role: 'system', content: 'AI-ассистент КЛГ АСУ ТК готов к работе. Задайте вопрос о лётной годности, нормативных документах или данных в системе.', ts: Date.now() }]); const [input, setInput] = useState(''); const [loading, setLoading] = useState(false); const endRef = useRef(null); useEffect(() => { endRef.current?.scrollIntoView({ behavior: 'smooth' }); }, [messages]); const send = async () => { if (!input.trim() || loading) return; const userMsg: Message = { role: 'user', content: input.trim(), ts: Date.now() }; setMessages(m => [...m, userMsg]); setInput(''); setLoading(true); try { const res = await fetch('/api/ai-chat', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ messages: [...messages, userMsg].map(m => ({ role: m.role, content: m.content })) }) }); const data = await res.json(); setMessages(m => [...m, { role: 'assistant', content: data.content || data.message || 'Нет ответа', ts: Date.now() }]); } catch (e: any) { setMessages(m => [...m, { role: 'assistant', content: `Ошибка: ${e.message}. Проверьте подключение к AI API.`, ts: Date.now() }]); } finally { setLoading(false); } }; return (
{messages.map((m, i) => (
{m.content}
{new Date(m.ts).toLocaleTimeString('ru-RU')}
))} {loading &&
Думаю...
}
setInput(e.target.value)} onKeyDown={e => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); send(); } }} placeholder="Задайте вопрос..." className="input-field flex-1" disabled={loading} />
); }