package com.airlock.iam.common.domain.service.jwt.signature;

import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Optional;

public final class CertificateThumbPrintConfig {
   private final Optional<String> certificateAlias;
   private final boolean addX5tThumbprint;
   private final boolean addX5tS256Thumbprint;

   public boolean isAnyThumbprintRequired() {
      return this.addX5tThumbprint || this.addX5tS256Thumbprint;
   }

   public static CertificateThumbPrintConfig.CertificateThumbPrintConfigBuilder builder() {
      return new CertificateThumbPrintConfig(Optional.empty(), false, false).toBuilder();
   }

   public static CertificateThumbPrintConfig noCertificateThumbprints() {
      return builder().build();
   }

   @SuppressFBWarnings(justification = "generated code")
   public CertificateThumbPrintConfig.CertificateThumbPrintConfigBuilder toBuilder() {
      return new CertificateThumbPrintConfig.CertificateThumbPrintConfigBuilder()
         .certificateAlias(this.certificateAlias)
         .addX5tThumbprint(this.addX5tThumbprint)
         .addX5tS256Thumbprint(this.addX5tS256Thumbprint);
   }

   @SuppressFBWarnings(justification = "generated code")
   public Optional<String> getCertificateAlias() {
      return this.certificateAlias;
   }

   @SuppressFBWarnings(justification = "generated code")
   public boolean isAddX5tThumbprint() {
      return this.addX5tThumbprint;
   }

   @SuppressFBWarnings(justification = "generated code")
   public boolean isAddX5tS256Thumbprint() {
      return this.addX5tS256Thumbprint;
   }

   @SuppressFBWarnings(justification = "generated code")
   public CertificateThumbPrintConfig(Optional<String> certificateAlias, boolean addX5tThumbprint, boolean addX5tS256Thumbprint) {
      this.certificateAlias = certificateAlias;
      this.addX5tThumbprint = addX5tThumbprint;
      this.addX5tS256Thumbprint = addX5tS256Thumbprint;
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class CertificateThumbPrintConfigBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private Optional<String> certificateAlias;
      @SuppressFBWarnings(justification = "generated code")
      private boolean addX5tThumbprint;
      @SuppressFBWarnings(justification = "generated code")
      private boolean addX5tS256Thumbprint;

      @SuppressFBWarnings(justification = "generated code")
      CertificateThumbPrintConfigBuilder() {
      }

      @SuppressFBWarnings(justification = "generated code")
      public CertificateThumbPrintConfig.CertificateThumbPrintConfigBuilder certificateAlias(Optional<String> certificateAlias) {
         this.certificateAlias = certificateAlias;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public CertificateThumbPrintConfig.CertificateThumbPrintConfigBuilder addX5tThumbprint(boolean addX5tThumbprint) {
         this.addX5tThumbprint = addX5tThumbprint;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public CertificateThumbPrintConfig.CertificateThumbPrintConfigBuilder addX5tS256Thumbprint(boolean addX5tS256Thumbprint) {
         this.addX5tS256Thumbprint = addX5tS256Thumbprint;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public CertificateThumbPrintConfig build() {
         return new CertificateThumbPrintConfig(this.certificateAlias, this.addX5tThumbprint, this.addX5tS256Thumbprint);
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "CertificateThumbPrintConfig.CertificateThumbPrintConfigBuilder(certificateAlias="
            + this.certificateAlias
            + ", addX5tThumbprint="
            + this.addX5tThumbprint
            + ", addX5tS256Thumbprint="
            + this.addX5tS256Thumbprint
            + ")";
      }
   }
}
