package com.airlock.iam.authentication.domain.model.airlock2fa;

import com.airlock.iam.factor.domain.model.airlock2fa.Airlock2FADeviceSettings;
import com.airlock.iam.factor.domain.model.airlock2fa.Airlock2FAMobileOnlyRedirectUri;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Optional;

public record Airlock2FAMobileOnlyAuthenticationStepSettings(
   Optional<Airlock2FAMobileOnlyRedirectUri> redirectUri, Optional<String> schemeOverride, boolean enableBypassMode, Airlock2FADeviceSettings deviceSettings
) {
   @SuppressFBWarnings(justification = "generated code")
   public static Airlock2FAMobileOnlyAuthenticationStepSettings.Airlock2FAMobileOnlyAuthenticationStepSettingsBuilder builder() {
      return new Airlock2FAMobileOnlyAuthenticationStepSettings.Airlock2FAMobileOnlyAuthenticationStepSettingsBuilder();
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class Airlock2FAMobileOnlyAuthenticationStepSettingsBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private Optional<Airlock2FAMobileOnlyRedirectUri> redirectUri;
      @SuppressFBWarnings(justification = "generated code")
      private Optional<String> schemeOverride;
      @SuppressFBWarnings(justification = "generated code")
      private boolean enableBypassMode;
      @SuppressFBWarnings(justification = "generated code")
      private Airlock2FADeviceSettings deviceSettings;

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

      @SuppressFBWarnings(justification = "generated code")
      public Airlock2FAMobileOnlyAuthenticationStepSettings.Airlock2FAMobileOnlyAuthenticationStepSettingsBuilder redirectUri(
         Optional<Airlock2FAMobileOnlyRedirectUri> redirectUri
      ) {
         this.redirectUri = redirectUri;
         return this;
      }

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

      @SuppressFBWarnings(justification = "generated code")
      public Airlock2FAMobileOnlyAuthenticationStepSettings.Airlock2FAMobileOnlyAuthenticationStepSettingsBuilder enableBypassMode(boolean enableBypassMode) {
         this.enableBypassMode = enableBypassMode;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public Airlock2FAMobileOnlyAuthenticationStepSettings.Airlock2FAMobileOnlyAuthenticationStepSettingsBuilder deviceSettings(
         Airlock2FADeviceSettings deviceSettings
      ) {
         this.deviceSettings = deviceSettings;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public Airlock2FAMobileOnlyAuthenticationStepSettings build() {
         return new Airlock2FAMobileOnlyAuthenticationStepSettings(this.redirectUri, this.schemeOverride, this.enableBypassMode, this.deviceSettings);
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "Airlock2FAMobileOnlyAuthenticationStepSettings.Airlock2FAMobileOnlyAuthenticationStepSettingsBuilder(redirectUri="
            + this.redirectUri
            + ", schemeOverride="
            + this.schemeOverride
            + ", enableBypassMode="
            + this.enableBypassMode
            + ", deviceSettings="
            + this.deviceSettings
            + ")";
      }
   }
}
