'use client'; import { useState, useRef, useEffect } from 'react'; import { getAuthToken } from '@/lib/api/api-client'; interface Message { role: 'user' | 'assistant'; content: string; } export default function AIAssistant() { const [isOpen, setIsOpen] = useState(false); const [messages, setMessages] = useState([ { role: 'assistant', content: 'Здравствуйте! Я AI-помощник REFLY. Спросите меня о лётной годности, ТО, директивах или рисках.', }, ]); const [input, setInput] = useState(''); const [loading, setLoading] = useState(false); const messagesEndRef = useRef(null); useEffect(() => { messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); }, [messages]); const sendMessage = async () => { if (!input.trim() || loading) return; const userMsg = input.trim(); setInput(''); setMessages((prev) => [...prev, { role: 'user', content: userMsg }]); setLoading(true); try { const token = typeof window !== 'undefined' ? (getAuthToken() || document.cookie.match(/auth-token=([^;]+)/)?.[1] || 'dev') : 'dev'; const res = await fetch('/api/v1/ai/chat', { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}`, }, body: JSON.stringify({ message: userMsg }), }); if (!res.ok) throw new Error('AI service unavailable'); const data = await res.json(); setMessages((prev) => [...prev, { role: 'assistant', content: data.reply }]); } catch { setMessages((prev) => [ ...prev, { role: 'assistant', content: 'Извините, не удалось получить ответ. Попробуйте позже.', }, ]); } finally { setLoading(false); } }; return ( <> {isOpen && (
🤖
AI Помощник REFLY
Контроль лётной годности
{messages.map((msg, i) => (
{msg.content}
))} {loading && (
Думаю...
)}
setInput(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && sendMessage()} placeholder="Задайте вопрос..." className="flex-1 px-3 py-2 border rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-blue-500" disabled={loading} aria-label="Сообщение" />
)} ); }