import type { AuthPermission } from "@/features/auth/auth-data";

function createCrudPermissions(subject: string) {
  return {
    read: { action: "read", subject },
    create: { action: "create", subject },
    update: { action: "update", subject },
    delete: { action: "delete", subject },
  } satisfies Record<string, AuthPermission>;
}

// Register frontend permissions here when a new backend subject is added.
// The action and subject values must match the backend permission names.
export const APP_PERMISSIONS = {
  cefpIssueMatrix: {
    read: { action: "read", subject: "CefpIssueMatrix" },
  },
  cdcIssueMatrix: {
    read: { action: "read", subject: "CdcIssueMatrix" },
  },
  issueMatrix: {
    ...createCrudPermissions("IssueMatrix"),
    export: { action: "export", subject: "IssueMatrix" },
  },
  workingGroupIssue: {
    ...createCrudPermissions("WorkingGroupIssue"),
    export: { action: "export", subject: "WorkingGroupIssue" },
  },
  meeting: createCrudPermissions("Meeting"),
  permission: createCrudPermissions("Permission"),
  role: createCrudPermissions("Role"),
  stakeholder: createCrudPermissions("Stakeholder"),
  user: createCrudPermissions("User"),
} as const;
