// Inlined contracts — avoids rootDir boundary issues with tsc
// Shared API response contracts used by the server.

export const appRoles = ["GUEST", "CUSTOMER", "PROVIDER", "SUPPORT", "MODERATOR", "ADMIN", "SUPER_ADMIN"] as const;
export type AppRole = (typeof appRoles)[number];

export const permissionKeys = [
  "users.read",
  "users.manage",
  "users.suspend",
  "users.ban",
  "ads.read",
  "ads.moderate",
  "requests.read",
  "requests.manage",
  "offers.read",
  "offers.manage",
  "reports.manage",
  "conversations.read_sensitive",
  "notifications.send",
  "settings.write",
  "admins.manage",
  "audit.read",
] as const;

export type PermissionKey = (typeof permissionKeys)[number];

export type ApiEnvelope<T> = {
  data?: T;
  error?: { message: string };
  requestId: string;
};

export type ApiId = { id: string };

export type Pagination = { limit: number; offset: number };

export type PaginatedResponse<T> = {
  items: T[];
  limit: number;
  offset: number;
  total: number;
};
