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

import com.airlock.iam.common.api.domain.model.certificate.ClientCertificate;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Optional;
import java.util.stream.Stream;

public enum OAuth2ClientCertificateBindingConfirmationMethod {
   SHA_256("S256", ClientCertificate.FingerprintAlgorithm.SHA_256);

   private static final String X509_CERTIFICATE_PREFIX = "x5t#";
   private final String method;
   private final ClientCertificate.FingerprintAlgorithm algorithm;

   public static Optional<OAuth2ClientCertificateBindingConfirmationMethod> method(String method) {
      return !method.startsWith("x5t#") ? Optional.empty() : Stream.of(values()).filter(m -> m.getMethod().equals(method)).findFirst();
   }

   public String getMethod() {
      return "x5t#" + this.method;
   }

   @SuppressFBWarnings(justification = "generated code")
   OAuth2ClientCertificateBindingConfirmationMethod(final String method, final ClientCertificate.FingerprintAlgorithm algorithm) {
      this.method = method;
      this.algorithm = algorithm;
   }

   @SuppressFBWarnings(justification = "generated code")
   public ClientCertificate.FingerprintAlgorithm getAlgorithm() {
      return this.algorithm;
   }
}
