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

import com.airlock.iam.oauth2.domain.model.Issuer;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import lombok.NonNull;

public final class DefaultOpenIDConnectCodeGrantRequestHandlerSettings implements OpenIDConnectCodeGrantRequestHandlerSettings {
   @NonNull
   private final OAuth2CodeGrantRequestHandlerSettings oauthSettings;
   private final boolean isIntegrationLogEnabled;
   @NonNull
   private final Issuer claimIssuer;

   @SuppressFBWarnings(justification = "generated code")
   public static DefaultOpenIDConnectCodeGrantRequestHandlerSettings.DefaultOpenIDConnectCodeGrantRequestHandlerSettingsBuilder builder() {
      return new DefaultOpenIDConnectCodeGrantRequestHandlerSettings.DefaultOpenIDConnectCodeGrantRequestHandlerSettingsBuilder();
   }

   @SuppressFBWarnings(justification = "generated code")
   private DefaultOpenIDConnectCodeGrantRequestHandlerSettings(
      @NonNull OAuth2CodeGrantRequestHandlerSettings oauthSettings, boolean isIntegrationLogEnabled, @NonNull Issuer claimIssuer
   ) {
      if (oauthSettings == null) {
         throw new NullPointerException("oauthSettings is marked non-null but is null");
      }

      if (claimIssuer == null) {
         throw new NullPointerException("claimIssuer is marked non-null but is null");
      }

      this.oauthSettings = oauthSettings;
      this.isIntegrationLogEnabled = isIntegrationLogEnabled;
      this.claimIssuer = claimIssuer;
   }

   @NonNull
   @SuppressFBWarnings(justification = "generated code")
   @Override
   public OAuth2CodeGrantRequestHandlerSettings oauthSettings() {
      return this.oauthSettings;
   }

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

   @NonNull
   @SuppressFBWarnings(justification = "generated code")
   @Override
   public Issuer claimIssuer() {
      return this.claimIssuer;
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class DefaultOpenIDConnectCodeGrantRequestHandlerSettingsBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private OAuth2CodeGrantRequestHandlerSettings oauthSettings;
      @SuppressFBWarnings(justification = "generated code")
      private boolean isIntegrationLogEnabled;
      @SuppressFBWarnings(justification = "generated code")
      private Issuer claimIssuer;

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

      @SuppressFBWarnings(justification = "generated code")
      public DefaultOpenIDConnectCodeGrantRequestHandlerSettings.DefaultOpenIDConnectCodeGrantRequestHandlerSettingsBuilder oauthSettings(
         @NonNull OAuth2CodeGrantRequestHandlerSettings oauthSettings
      ) {
         if (oauthSettings == null) {
            throw new NullPointerException("oauthSettings is marked non-null but is null");
         }

         this.oauthSettings = oauthSettings;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public DefaultOpenIDConnectCodeGrantRequestHandlerSettings.DefaultOpenIDConnectCodeGrantRequestHandlerSettingsBuilder isIntegrationLogEnabled(
         boolean isIntegrationLogEnabled
      ) {
         this.isIntegrationLogEnabled = isIntegrationLogEnabled;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public DefaultOpenIDConnectCodeGrantRequestHandlerSettings.DefaultOpenIDConnectCodeGrantRequestHandlerSettingsBuilder claimIssuer(
         @NonNull Issuer claimIssuer
      ) {
         if (claimIssuer == null) {
            throw new NullPointerException("claimIssuer is marked non-null but is null");
         }

         this.claimIssuer = claimIssuer;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public DefaultOpenIDConnectCodeGrantRequestHandlerSettings build() {
         return new DefaultOpenIDConnectCodeGrantRequestHandlerSettings(this.oauthSettings, this.isIntegrationLogEnabled, this.claimIssuer);
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "DefaultOpenIDConnectCodeGrantRequestHandlerSettings.DefaultOpenIDConnectCodeGrantRequestHandlerSettingsBuilder(oauthSettings="
            + this.oauthSettings
            + ", isIntegrationLogEnabled="
            + this.isIntegrationLogEnabled
            + ", claimIssuer="
            + this.claimIssuer
            + ")";
      }
   }
}
