import React from 'react' import { useRouter } from 'next/navigation' import useNavigationStore from '@/app/store/navigationStore' import type { NavigationStore } from '@/app/store/navigationStore' export enum MainRoutes { DASHBOARD = '/dashboard', NAVIGATION = '/navigation', ALERTS = '/alerts', REPORTS = '/reports', OBJECTS = '/objects' } export const SIDEBAR_ITEM_MAP = { 1: { type: 'route', value: MainRoutes.DASHBOARD }, 2: { type: 'route', value: MainRoutes.NAVIGATION }, 8: { type: 'route', value: MainRoutes.ALERTS }, 9: { type: 'route', value: MainRoutes.REPORTS } } as const export class NavigationService { private router!: ReturnType private navigationStore!: NavigationStore private initialized = false init(router: ReturnType, navigationStore: NavigationStore) { if (this.initialized) { return // Предотвращаем повторную инициализацию } this.router = router this.navigationStore = navigationStore this.initialized = true } isInitialized(): boolean { return this.initialized } navigateToRoute(route: MainRoutes) { // Убираем суб-меню перед переходом на другую страницу if (route !== MainRoutes.NAVIGATION) { this.navigationStore.setCurrentSubmenu(null) } this.router.push(route) } handleSidebarItemClick(itemId: number, currentPath: string): boolean { if (!this.initialized) { console.error('NavigationService not initialized!') return false } const mapping = SIDEBAR_ITEM_MAP[itemId as keyof typeof SIDEBAR_ITEM_MAP] if (!mapping) { return false } if (mapping.type === 'route') { this.navigateToRoute(mapping.value as MainRoutes) return true } return false } goBack() { this.navigationStore.goBack() } selectObjectAndGoToDashboard(objectId: string, objectTitle: string) { this.navigationStore.setCurrentObject(objectId, objectTitle) this.navigateToRoute(MainRoutes.DASHBOARD) } } export const navigationService = new NavigationService() export function useNavigationService() { const router = useRouter() const navigationStore = useNavigationStore() React.useMemo(() => { if (!navigationService.isInitialized()) { navigationService.init(router, navigationStore) } }, [router, navigationStore]) return navigationService }