#' OpenAPI Petstore
#'
#' This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters.
#'
#' The version of the OpenAPI document: 1.0.0
#' Generated by: https://openapi-generator.tech
#'
#' @docType class
#' @title ApiException
#' @description ApiException Class
#' @format An \code{R6Class} generator object
#' @field status Status of the ApiException
#' @field reason Reason of the ApiException
#' @field body Body of the http response
#' @field headers Headers of the http response
#' @field error_object error object type
#' @export
ApiException <- R6::R6Class(
  "ApiException",
  public = list(
    status = NULL,
    reason = NULL,
    body = NULL,
    headers = NULL,
    error_object = NULL,
    #' Initialize a new ApiException class.
    #'
    #' @description
    #' Initialize a new ApiExceptino class.
    #'
    #' @param status HTTP status.
    #' @param reason Reason of the ApiException.
    #' @param http_response HTTP response object.
    #' @export
    initialize = function(status = NULL, reason = NULL, http_response = NULL) {
      if (!is.null(http_response)) {
        self$status <- http_response$status_code
        errorMsg <- http_response$response
        if (is.null(errorMsg) || errorMsg == "") {
          errorMsg <- "Api exception encountered. No details given."
        }
        self$body <- errorMsg
        self$headers <- http_response$headers
        self$reason <- http_response$http_status_desc
        self$error_object <- ModelApiResponse$new()$fromJSONString(http_response$response)
      } else {
        self$status <- status
        self$reason <- reason
        self$body <- NULL
        self$headers <- NULL
        self$error_object <- NULL
      }
    },
    #' Returns the string format of ApiException.
    #'
    #' @description
    #' Returns the string format of ApiException.
    #'
    #' @return the string format of ApiException.
    #' @export
    toString = function() {
      errorMsg <- ""
      errorMsg <- paste("status : ", self$status, "\n", sep = "")
      errorMsg <- paste(errorMsg, "Reason : ", self$reason, "\n", sep = "")
      if (!is.null(self$headers)) {
        errorMsg <- paste(errorMsg, "Headers : ", "\n", sep = "")
        for (name in names(self$headers)) {
          errorMsg <- paste(errorMsg, name, " : ", self$headers[[name]], "\n", sep = " ")
        }
      }
      if (!is.null(self$body)) {
        errorMsg <- paste(errorMsg, "Body : ", "\n", sep = "")
        errorMsg <- paste(errorMsg, self$body, "\n")
      }
      if (!is.null(self$error_object)) {
        errorMsg <- paste(errorMsg, "Error object : ", "\n", sep = "")
        errorMsg <- paste(errorMsg, self$error_object$toJSONString(), "\n")
      }
      errorMsg
    }
  )
)
