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

import type { Component } from 'vue';

export type AppRole = 'ADMIN' | 'MANAGER' | 'MAID' | 'GOD';

export interface SubMenuItem {
  id: string;
  label: string;
  path: string;
  icon?: string;
  queryParam?: string;
  roles: AppRole[];
  readOnlyModeFor?: AppRole[];
  moduleName?: string;
}

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

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

export const getFilteredMenuItems = (userRole: AppRole): MenuItem[] => {
  // GOD role sees all menu items
  if (userRole === 'GOD') {
    return MENU_ITEMS.map((item) => ({
      ...item,
      subItems: item.subItems?.map((sub) => ({ ...sub })),
    }));
  }

  return MENU_ITEMS
    .filter((item) => item.roles.includes(userRole))
    .map((item) => ({
      ...item,
      subItems: item.subItems?.filter((sub) => sub.roles.includes(userRole)),
    }));
};

export const isReadOnlyForRole = (item: MenuItem | SubMenuItem, userRole: AppRole): boolean => {
  // GOD role never has read-only mode
  if (userRole === 'GOD') return false;

  return item.readOnlyModeFor?.includes(userRole) ?? false;
};

