package cn.palmte.work;

import org.springframework.http.HttpStatus;
import org.springframework.util.Assert;

import java.util.function.Supplier;

/**
 * @author <a href="https://github.com/TAKETODAY">Harry Yang</a>
 * @since 2.0 2022/12/30 15:25
 */
public class ErrorMessageException extends NoStackTraceRuntimeException {

  private final HttpStatus status;

  public ErrorMessageException(/*@Nullable*/ String msg) {
    this(msg, null, HttpStatus.BAD_REQUEST);
  }

  public ErrorMessageException(/*@Nullable*/ String msg, /*@Nullable*/ Throwable cause, HttpStatus status) {
    super(msg, cause);
    Assert.notNull(status, "http status is required");
    this.status = status;
  }

  public HttpStatus getStatus() {
    return status;
  }

  public static ErrorMessageException failed(String message) {
    return new ErrorMessageException(message);
  }

  public static ErrorMessageException failed(String message, HttpStatus status) {
    return new ErrorMessageException(message, null, status);
  }

  public static void notNull(Object obj, String message) {
    if (obj == null) {
      throw ErrorMessageException.failed(message, HttpStatus.NOT_FOUND);
    }
  }

  public static void notNull(Object obj, Supplier<String> supplier) {
    if (obj == null) {
      throw new ErrorMessageException(supplier.get());
    }
  }

}
