// @flow
import httpErrors from 'http-errors';

export function AuthenticationError(
  message: string = 'Invalid authentication'
) {
  return httpErrors(401, message, { id: 'authentication_required' });
}

export function AuthorizationError(
  message: string = 'You do not have permission to access this resource'
) {
  return httpErrors(403, message, { id: 'permission_required' });
}

export function AdminRequiredError(
  message: string = 'An admin role is required to access this resource'
) {
  return httpErrors(403, message, { id: 'admin_required' });
}

export function UserSuspendedError({ adminEmail }: { adminEmail: string }) {
  return httpErrors(403, 'Your access has been suspended by the team admin', {
    id: 'user_suspended',
    errorData: {
      adminEmail,
    },
  });
}

export function InvalidRequestError(message: string = 'Request invalid') {
  return httpErrors(400, message, { id: 'invalid_request' });
}

export function NotFoundError(message: string = 'Resource not found') {
  return httpErrors(404, message, { id: 'not_found' });
}

export function ParamRequiredError(
  message: string = 'Required parameter missing'
) {
  return httpErrors(400, message, { id: 'param_required' });
}

export function ValidationError(message: string = 'Validation failed') {
  return httpErrors(400, message, { id: 'validation_error' });
}
