import React, { useState } from 'react'; import { useDemoStore } from '../../mock/store'; import { Button, Badge } from '../../shared/ui'; import { Sparkles, Send, MessageSquare, Zap, ChevronRight, ChevronLeft, ShoppingBag, Calendar, CheckSquare, Car, Receipt, RotateCcw, } from 'lucide-react'; import { useNavigate } from 'react-router-dom'; import { ulid } from '../../shared/lib/ulid'; export const RightCommandPanel: React.FC = () => { const { isRightPanelCollapsed, setIsRightPanelCollapsed, getActiveProfile, setIsQuickActionsOpen, activeLocation, } = useDemoStore(); const profile = getActiveProfile(); const navigate = useNavigate(); const [activeTab, setActiveTab] = useState<'ai' | 'chat' | 'actions'>('ai'); // AI Mock Chat state const [messages, setMessages] = useState<{ id: string; sender: 'user' | 'ai'; text: string; time: string }[]>([ { id: '1', sender: 'ai', text: `Приветствую! Я Krona AI. Анализирую точку «${activeLocation}» (${profile.name}). Выручка в норме, но обратите внимание на запас охлажденного лосося — осталось 2.4 кг. Чем помочь?`, time: '12:30', }, ]); const [prompt, setPrompt] = useState(''); const [isAiTyping, setIsAiTyping] = useState(false); // Communications mini state const [chatCategory, setChatCategory] = useState<'all' | 'clients' | 'team'>('all'); const QUICK_QUESTIONS = [ 'Что требует внимания сегодня?', 'Какие позиции скоро закончатся?', 'Самые прибыльные позиции?', 'Каких клиентов стоит вернуть?', ]; const handleSendPrompt = (textToSend?: string) => { const q = textToSend || prompt; if (!q.trim()) return; const userMsg = { id: `usr-${ulid()}`, sender: 'user' as const, text: q, time: new Date().toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' }), }; setMessages((prev) => [...prev, userMsg]); setPrompt(''); setIsAiTyping(true); setTimeout(() => { let aiReply = 'Анализирую операционные данные Кроны...'; if (q.includes('внимания')) { aiReply = '⚠️ 3 критических алерта: 1) Запас лосося ниже минимума (2.4 кг из 6 кг); 2) Заказ #104 готовится уже 18 минут; 3) Курьер Алексей завершил смену с 24 500 ₽ наличных к инкассации.'; } else if (q.includes('закончатся') || q.includes('склад')) { aiReply = '📦 Скоро закончатся: Лосось атлантический (2.4 кг), Угорь копченый (0.0 кг — в стоп-листе!), Тигровые креветки (4.8 кг). Рекомендую сформировать авто-заявку в СибРыбТорг.'; } else if (q.includes('прибыльные') || q.includes('блюда')) { aiReply = '💰 Топ по маржинальности: 1) Гёдза свинина (маржа 76.1%, food cost 23.9%); 2) Рамен Тонкоцу (маржа 72.1%); 3) Филадельфия Премиум (выручка 58 650 ₽/день).'; } else if (q.includes('клиент')) { aiReply = '👥 В зоне риска 14 постоянных клиентов (не было визитов более 30 дней). Например: Дмитрий Мельников (LTV 18 500 ₽). Предлагаю запустить триггерную рассылку со скидкой 15% в Telegram-боте.'; } else { aiReply = `Ответ AI по профилю «${profile.name}»: Задача зафиксирована в оркестраторе Кроны. Контекст передан специализированным агентам.`; } setMessages((prev) => [ ...prev, { id: `ai-${Date.now()}`, sender: 'ai', text: aiReply, time: new Date().toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' }), }, ]); setIsAiTyping(false); }, 650); }; if (isRightPanelCollapsed) { return ( ); } return ( ); };