export class AppError extends Error {
  public readonly statusCode: number;

  constructor(message: string, statusCode = 400) {
    super(message);
    this.statusCode = statusCode;
    Object.setPrototypeOf(this, new.target.prototype);
  }

  static badRequest(message: string) {
    return new AppError(message, 400);
  }

  static unauthorized(message = "Não autorizado") {
    return new AppError(message, 401);
  }

  static forbidden(message = "Acesso negado") {
    return new AppError(message, 403);
  }

  static notFound(message = "Recurso não encontrado") {
    return new AppError(message, 404);
  }

  static internal(message = "Erro interno do servidor") {
    return new AppError(message, 500);
  }
}
