// src/client/shared/config/menuConfig.ts
// Configuration for dashboard menu with permission-driven access and nested items

import { usePermissionsStore } from '@client/entities/permissions';

export interface SubMenuItem {
  id: string;
  label: string;
  path: string;
  icon?: string;
  queryParam?: string;
  moduleName?: string;
}

export interface MenuItem {
  id: string;
  label: string;
  icon: string;
  path: string;
  subItems?: SubMenuItem[];
  moduleName?: string;
  resources?: string[];
}

export const MENU_ITEMS: MenuItem[] = [
  {
    id: 'notes',
    label: 'Заметки',
    icon: 'StickyNote',
    path: '/dashboard/notes',
    moduleName: 'notes',
  },
  {
    id: 'employees',
    label: 'Сотрудники',
    icon: 'Users',
    path: '/dashboard/employees',
    moduleName: 'personnel',
  },
  {
    id: 'schedule',
    label: 'График смен',
    icon: 'Calendar',
    path: '/dashboard/schedule',
    moduleName: 'schedule',
  },
  {
    id: 'blacklist',
    label: 'Черный список',
    icon: 'Ban',
    path: '/dashboard/blacklist',
    moduleName: 'blacklist',
  },
  {
    id: 'access',
    label: 'Доступ',
    icon: 'LockKeyhole',
    path: '/dashboard/access',
    moduleName: 'access',
  },
  {
    id: 'contractors',
    label: 'Контрагенты',
    icon: 'Building2',
    path: '/dashboard/contractors',
    moduleName: 'contractors',
  },
  {
    id: 'rooms',
    label: 'База номеров',
    icon: 'DoorOpen',
    path: '/dashboard/rooms',
    moduleName: 'rooms',
  },
  {
    id: 'equipment',
    label: 'Локальное оборудование',
    icon: 'Network',
    path: '/dashboard/equipment',
    moduleName: 'equipment',
  },
  {
    id: 'inventory',
    label: 'Инвентарь',
    icon: 'Package',
    path: '/dashboard/inventory',
    moduleName: 'inventory',
  },
  {
    id: 'operations',
    label: 'Текущие операции',
    icon: 'RefreshCcw',
    path: '/dashboard/paymaster',
    moduleName: 'operations',
    resources: ['checkin', 'paymaster', 'cleaning'],
  },
  {
    id: 'tasks',
    label: 'Задачи',
    icon: 'CheckSquare',
    path: '/dashboard/tasks',
    moduleName: 'tasks',
  },
];

export const isReadOnlyForPermissions = (item: MenuItem | SubMenuItem): boolean => {
  const permissionsStore = usePermissionsStore();
  const moduleName = item.moduleName ?? item.id;

  if (moduleName === 'dashboard' || moduleName === 'settings') return false;

  const resources = 'resources' in item && item.resources
    ? item.resources
    : [moduleName];

  const hasRead = resources.some(r => permissionsStore.hasPermission(`${r}:read`));
  if (!hasRead) return false;

  const hasNonReadPermission = permissionsStore.permissions.some((permission) => {
    const value = String(permission);
    return resources.some(r => value.startsWith(`${r}:`) && !value.endsWith(':read'));
  });

  return !hasNonReadPermission;
};

export const hasReadPermissionForItem = (item: MenuItem | SubMenuItem): boolean => {
  const permissionsStore = usePermissionsStore();
  const moduleName = item.moduleName ?? item.id;

  if (moduleName === 'dashboard' || moduleName === 'settings') return true;

  const resources = 'resources' in item && item.resources
    ? item.resources
    : [moduleName];

  return resources.some(resource => permissionsStore.hasPermission(`${resource}:read`));
};
