import { Role } from "../generated/prisma/client";

// Capacités de l'application. Les modules (agenda, mail, comptes…) vérifient une capacité
// plutôt qu'un rôle en dur, pour faire évoluer la matrice sans toucher aux endpoints.
export type Capability =
  | "config:manage"
  | "users:manage"
  | "agenda:read"
  | "agenda:write"
  | "mail:read"
  | "mail:write"
  | "drive:read"
  | "drive:write"
  | "whatsapp:read"
  | "whatsapp:write";

export const ALL_CAPABILITIES: Capability[] = [
  "config:manage",
  "users:manage",
  "agenda:read",
  "agenda:write",
  "mail:read",
  "mail:write",
  "drive:read",
  "drive:write",
  "whatsapp:read",
  "whatsapp:write",
];

// Matrice rôle → capacités (cf. 01_ROLES_ET_DROITS.md).
export const ROLE_CAPABILITIES: Record<Role, Capability[]> = {
  super_admin: ALL_CAPABILITIES,
  admin: [
    "agenda:read",
    "agenda:write",
    "mail:read",
    "mail:write",
    "drive:read",
    "drive:write",
    "whatsapp:read",
    "whatsapp:write",
  ],
  user: ["agenda:read", "mail:read", "drive:read", "whatsapp:read"],
};

export function hasCapability(role: Role | string, cap: Capability): boolean {
  const caps = ROLE_CAPABILITIES[role as Role];
  return Array.isArray(caps) && caps.includes(cap);
}
