package com.airlock.iam.oauth2.domain.model.validation;

import java.util.Optional;
import java.util.stream.Stream;

public enum OAuth2Error {
   INVALID_REQUEST("invalid_request"),
   INVALID_CLIENT("invalid_client"),
   INVALID_GRANT("invalid_grant"),
   UNAUTHORIZED_CLIENT("unauthorized_client"),
   UNSUPPORTED_GRANT_TYPE("unsupported_grant_type"),
   INVALID_SCOPE("invalid_scope"),
   TEMPORARILY_UNAVAILABLE("temporarily_unavailable"),
   SERVER_ERROR("server_error"),
   UNSUPPORTED_RESPONSE_TYPE("unsupported_response_type"),
   UNSUPPORTED_RESPONSE_MODE("unsupported_response_mode"),
   ACCESS_DENIED("access_denied"),
   INTERACTION_REQUIRED("interaction_required"),
   LOGIN_REQUIRED("login_required"),
   ACCOUNT_SELECTION_REQUIRED("account_selection_required"),
   CONSENT_REQUIRED("consent_required"),
   INSUFFICIENT_SCOPE("insufficient_scope"),
   REQUEST_NOT_SUPPORTED("request_not_supported"),
   REQUEST_URI_NOT_SUPPORTED("request_uri_not_supported"),
   INVALID_TARGET("invalid_target");

   private final String parameterValue;

   OAuth2Error(String value) {
      this.parameterValue = value;
   }

   public String getParameterValue() {
      return this.parameterValue;
   }

   public static Optional<OAuth2Error> fromCode(String code) {
      return Stream.of(values()).filter(err -> err.getParameterValue().equals(code)).findFirst();
   }
}
