// src/shared/contracts/permissions.ts
// Shared RBAC permissions contract used by frontend and backend

/**
 * Application permissions enum
 *
 * Naming convention: 'resource:action'
 * - resource: The entity being accessed (e.g., rooms, notes, tasks)
 * - action: The operation being performed (read, write, delete, manage)
 */
export enum AppPermission {
  // System permissions
  SYSTEM_MANAGE = 'system:manage',
  SYSTEM_RECEIVE_MENTIONS = 'system:receive_mentions',

  // Rooms permissions
  ROOMS_READ = 'rooms:read',
  ROOMS_WRITE = 'rooms:write',
  ROOMS_DELETE = 'rooms:delete',
  ROOMS_MANAGE = 'rooms:manage',

  // Notes permissions
  NOTES_READ = 'notes:read',
  NOTES_CREATE_PRIVATE = 'notes:create_private',
  NOTES_CREATE_PUBLIC = 'notes:create_public',
  NOTES_VIEW_PUBLIC_BOARD = 'notes:view_public_board',
  NOTES_EDIT = 'notes:edit',
  NOTES_EDIT_ANY = 'notes:edit_any',
  NOTES_EDIT_AFTER_COMMENT = 'notes:edit_after_comment',
  NOTES_CHANGE_PRIORITY = 'notes:change_priority',
  NOTES_CHANGE_STATUS = 'notes:change_status',
  NOTES_AUTHORITY_HIGHLIGHT = 'notes:authority_highlight',
  NOTES_DELETE_OWN = 'notes:delete_own',
  NOTES_DELETE_ANY = 'notes:delete_any',

  // Tasks permissions
  TASKS_READ = 'tasks:read',
  TASKS_ACCESS = 'tasks:access',

  // Schedule permissions
  SCHEDULE_READ = 'schedule:read',
  SCHEDULE_REQUEST_APPROVAL = 'schedule:request_approval',
  SCHEDULE_MANAGE = 'schedule:manage',
  SCHEDULE_TRACK_MANAGER = 'schedule:track_manager',

  // Personnel permissions
  PERSONNEL_READ = 'personnel:read',
  PERSONNEL_WRITE = 'personnel:write',
  PERSONNEL_DELETE = 'personnel:delete',
  PERSONNEL_MANAGE = 'personnel:manage',
  PERSONNEL_ASSIGN_ADMIN = 'personnel:assign_admin',
  PERSONNEL_ASSIGN_MANAGER = 'personnel:assign_manager',
  PERSONNEL_ASSIGN_MAID = 'personnel:assign_maid',


  // Paymaster permissions (radio group: mutually exclusive escalation levels)
  PAYMASTER_READ = 'paymaster:read',
  PAYMASTER_READ_ONLY = 'paymaster:read_only',
  PAYMASTER_TODAY_ONLY = 'paymaster:today_only',
  PAYMASTER_YESTERDAY_TOO = 'paymaster:yesterday_too',
  PAYMASTER_ANY_DATE = 'paymaster:any_date',

  // Check-in permissions (Заезд/Выезд)
  CHECKIN_READ = 'checkin:read',
  CHECKIN_WRITE = 'checkin:write',
  CHECKIN_DELETE = 'checkin:delete',
  CHECKIN_MANAGE = 'checkin:manage',

  // Cleaning schedule permissions (График уборки)
  CLEANING_READ = 'cleaning:read',
  CLEANING_MANAGE = 'cleaning:manage',

  // Individual reference book permissions (for granular control)
  INVENTORY_READ = 'inventory:read',
  INVENTORY_EDIT = 'inventory:edit',
  INVENTORY_REQUEST_APPROVAL = 'inventory:request_approval',
  CONTRACTORS_READ = 'contractors:read',
  CONTRACTORS_EDIT = 'contractors:edit',
  CONTRACTORS_REQUEST_APPROVAL = 'contractors:request_approval',
  BLACKLIST_READ = 'blacklist:read',
  BLACKLIST_EDIT = 'blacklist:edit',
  BLACKLIST_REQUEST_APPROVAL = 'blacklist:request_approval',
  EQUIPMENT_READ = 'equipment:read',
  EQUIPMENT_EDIT = 'equipment:edit',
  EQUIPMENT_REQUEST_APPROVAL = 'equipment:request_approval',
  ACCESS_READ = 'access:read',
  ACCESS_EDIT = 'access:edit',
  ACCESS_REQUEST_APPROVAL = 'access:request_approval',

  // Approval permissions
  APPROVAL_READ = 'approval:read',
  APPROVAL_MANAGE = 'approval:manage',
  APPROVAL_RECEIVE_NOTIFICATIONS = 'approval:receive_notifications',

  // Notifications permissions
  NOTIFICATIONS_READ = 'notifications:read',
}
