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

import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import lombok.NonNull;

public final class DefaultOpenIDConnectCodeGrantRequestParserSettings implements OpenIDConnectCodeGrantRequestParserSettings {
   @NonNull
   private final OAuth2CodeGrantRequestParserSettings oauthSettings;
   @NonNull
   private final OpenIDConnectCodeGrantRequestHandlerSettings oidcRequestHandlerSettings;

   @Override
   public OAuth2CodeGrantRequestHandlerSettings oauthRequestHandlerSettings() {
      return this.oauthSettings.requestHandlerSettings();
   }

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

   @SuppressFBWarnings(justification = "generated code")
   private DefaultOpenIDConnectCodeGrantRequestParserSettings(
      @NonNull OAuth2CodeGrantRequestParserSettings oauthSettings, @NonNull OpenIDConnectCodeGrantRequestHandlerSettings oidcRequestHandlerSettings
   ) {
      if (oauthSettings == null) {
         throw new NullPointerException("oauthSettings is marked non-null but is null");
      }

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

      this.oauthSettings = oauthSettings;
      this.oidcRequestHandlerSettings = oidcRequestHandlerSettings;
   }

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

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

   @SuppressFBWarnings(justification = "generated code")
   public static class DefaultOpenIDConnectCodeGrantRequestParserSettingsBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private OAuth2CodeGrantRequestParserSettings oauthSettings;
      @SuppressFBWarnings(justification = "generated code")
      private OpenIDConnectCodeGrantRequestHandlerSettings oidcRequestHandlerSettings;

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

      @SuppressFBWarnings(justification = "generated code")
      public DefaultOpenIDConnectCodeGrantRequestParserSettings.DefaultOpenIDConnectCodeGrantRequestParserSettingsBuilder oauthSettings(
         @NonNull OAuth2CodeGrantRequestParserSettings 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 DefaultOpenIDConnectCodeGrantRequestParserSettings.DefaultOpenIDConnectCodeGrantRequestParserSettingsBuilder oidcRequestHandlerSettings(
         @NonNull OpenIDConnectCodeGrantRequestHandlerSettings oidcRequestHandlerSettings
      ) {
         if (oidcRequestHandlerSettings == null) {
            throw new NullPointerException("oidcRequestHandlerSettings is marked non-null but is null");
         }

         this.oidcRequestHandlerSettings = oidcRequestHandlerSettings;
         return this;
      }

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

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "DefaultOpenIDConnectCodeGrantRequestParserSettings.DefaultOpenIDConnectCodeGrantRequestParserSettingsBuilder(oauthSettings="
            + this.oauthSettings
            + ", oidcRequestHandlerSettings="
            + this.oidcRequestHandlerSettings
            + ")";
      }
   }
}
