package {{basePackage}}

import play.api.http.DefaultHttpErrorHandler
import play.api.libs.json.JsResultException
import play.api.mvc.Results._
import play.api.mvc.{RequestHeader, Result}

import scala.concurrent.Future

class ErrorHandler extends DefaultHttpErrorHandler {
  override def onServerError(request: RequestHeader, e: Throwable): Future[Result] = e match {
    {{#generateCustomExceptions}}
    case _: OpenApiExceptions.MissingRequiredParameterException =>
    {{/generateCustomExceptions}}
    {{^generateCustomExceptions}}
    case _: IllegalArgumentException =>
    {{/generateCustomExceptions}}
      Future.successful(BadRequest(e.getMessage))
    case _: JsResultException =>
      Future.successful(BadRequest(e.getMessage))
    case _ =>
      // Handles dev mode properly, or otherwise returns internal server error in production mode
      super.onServerError(request, e)
  }
}
