import { z } from 'zod';

/**
 * Référentiel identité & permissions (R0).
 * La matrice rôles × objets × droits vit EN BASE (table Permission) ; ici ne
 * vivent que les vocabulaires partagés entre l'API, le seed et les clients.
 */

export const ROLE_NAMES = [
  'Administrateur',
  'Dispatcher',
  'Technicien',
  'Technicien limité',
  'Gestionnaire',
  'Demandeur',
  'Vue seule',
] as const;
export type RoleName = (typeof ROLE_NAMES)[number];

/** Catégories d'objets de la matrice — la matrice est complète dès R0, les
 *  écrans correspondants arrivent release par release (R1 → R3). */
export const OBJECT_CATEGORIES = [
  'WORK_ORDERS',
  'REQUESTS',
  'ASSETS',
  'LOCATIONS',
  'METERS',
  'PARTS',
  'PURCHASE_ORDERS',
  'PEOPLE_TEAMS',
  'ANALYTICS',
  'SETTINGS',
] as const;
export type ObjectCategory = (typeof OBJECT_CATEGORIES)[number];

export const PERMISSION_RIGHTS = [
  'view',
  'viewOther',
  'create',
  'edit',
  'delete',
] as const;
export type PermissionRight = (typeof PERMISSION_RIGHTS)[number];

export const PermissionEntrySchema = z.object({
  objectCategory: z.enum(OBJECT_CATEGORIES),
  canView: z.boolean(),
  canViewOther: z.boolean(),
  canCreate: z.boolean(),
  canEdit: z.boolean(),
  canDelete: z.boolean(),
});
export type PermissionEntry = z.infer<typeof PermissionEntrySchema>;
