import React, { useEffect, useState } from 'react'; import { NavLink, Outlet } from 'react-router-dom'; import { LayoutDashboard, Building2, CreditCard, Package, Smartphone, Server, BellRing, AlertTriangle, FileCheck2, RotateCcw, CheckCircle2, Radio, ExternalLink, } from 'lucide-react'; import { useKccStore } from '../store/kccStore'; import { OperatorSessionSwitcher } from './OperatorSessionSwitcher'; import { InspectorDrawer } from './InspectorDrawer'; import { ConfirmOperatorActionModal } from './ConfirmOperatorAction'; import { ServerMonitorOutageBanner } from './ServerMonitorOutageBanner'; export const ControlCenterShell: React.FC = () => { const isInitialized = useKccStore((state) => state.isInitialized); const initialize = useKccStore((state) => state.initialize); const resetToDefaults = useKccStore((state) => state.resetToDefaults); const serverMonitorOutage = useKccStore((state) => state.serverMonitorOutage); const toggleServerMonitorOutage = useKccStore((state) => state.toggleServerMonitorOutage); const [utcTime, setUtcTime] = useState(''); const [isResetting, setIsResetting] = useState(false); const [showSavedFeedback, setShowSavedFeedback] = useState(false); useEffect(() => { if (!isInitialized) { initialize(); } }, [isInitialized, initialize]); useEffect(() => { const updateTime = () => { const now = new Date(); setUtcTime(now.toISOString().replace('T', ' ').slice(0, 19) + ' UTC'); }; updateTime(); const interval = setInterval(updateTime, 1000); return () => clearInterval(interval); }, []); const handleReset = async () => { if (confirm('Сбросить состояние демонстрационной базы данных к исходному состоянию?')) { setIsResetting(true); await resetToDefaults(); setIsResetting(false); setShowSavedFeedback(true); setTimeout(() => setShowSavedFeedback(false), 3000); } }; const navItems = [ { to: '/control', label: 'Обзор', icon: LayoutDashboard, end: true }, { to: '/control/organizations', label: 'Организации', icon: Building2 }, { to: '/control/billing', label: 'Подписки и биллинг', icon: CreditCard }, { to: '/control/modules', label: 'Каталог модулей', icon: Package }, { to: '/control/installations', label: 'Установки и клиенты', icon: Smartphone }, { to: '/control/infrastructure', label: 'Инфраструктура', icon: Server }, { to: '/control/announcements', label: 'Сообщения', icon: BellRing }, { to: '/control/incidents', label: 'Инциденты', icon: AlertTriangle }, { to: '/control/audit', label: 'Неизменяемый аудит', icon: FileCheck2 }, ]; return (