const _handledError = Symbol('handledError');

export function isHandledError(err) {
  return !!err[_handledError];
}

export function unwrapHandledError(err) {
  return err[_handledError] || {};
}

export function wrapHandledError(err, {
  type,
  message,
  redirectTo,
  status = 200
}) {
  err[_handledError] = { type, message, redirectTo, status };
  return err;
}

// for use with express-validator error formatter
export const createValidatorErrorFormatter = (type, redirectTo) =>
  ({ msg }) => wrapHandledError(
    new Error(msg),
    {
      type,
      message: msg,
      redirectTo,
      // we default to 400 as these are malformed requests
      status: 400
    }
  );
