/**
 * @typedef MedusaErrorType
 *
 */
export const MedusaErrorTypes = {
  /** Errors stemming from the database */
  DB_ERROR: "database_error",
  INVALID_ARGUMENT: "invalid_argument",
  INVALID_DATA: "invalid_data",
  NOT_FOUND: "not_found",
  NOT_ALLOWED: "not_allowed"
}

/**
 * Standardized error to be used across Medusa project.
 * @extends Error
 */
class MedusaError extends Error {
  /**
   * Creates a standardized error to be used across Medusa project.
   * @param type {MedusaErrorType} - the type of error.
   * @param params {Array} - Error params.
   */
  constructor(name, message, ...params) {
    super(...params)

    if (Error.captureStackTrace) {
      Error.captureStackTrace(this, MedusaError)
    }

    this.name = name
    this.message = message
    this.date = new Date()
  }
}

MedusaError.Types = MedusaErrorTypes

export default MedusaError
