package com.airlock.iam.authentication.infrastructure.service.ui;

import com.airlock.iam.authentication.application.configuration.airlock2fa.Airlock2FAAdditionalActivationStepConfig;
import com.airlock.iam.authentication.application.configuration.airlock2fa.Airlock2FAUserFactorAuthenticationStepConfig;
import com.airlock.iam.authentication.application.configuration.airlock2fa.Airlock2FAUsernamelessQrCodeAuthenticationStepConfig;
import com.airlock.iam.authentication.application.configuration.cronto.CrontoAuthStepConfig;
import com.airlock.iam.authentication.application.configuration.emailotp.EmailOtpAuthenticationStepConfig;
import com.airlock.iam.authentication.application.configuration.emailotp.LegacyEmailOtpAuthenticationStepConfig;
import com.airlock.iam.authentication.application.configuration.fido.FidoAuthenticationStepConfig;
import com.airlock.iam.authentication.application.configuration.fido.FidoPasswordlessAuthenticationStepConfig;
import com.airlock.iam.authentication.application.configuration.identification.UserIdentifyingFidoStepConfig;
import com.airlock.iam.authentication.application.configuration.kerberos.KerberosAuthStepConfig;
import com.airlock.iam.authentication.application.configuration.migration.MigrationSelectionStepConfig;
import com.airlock.iam.authentication.application.configuration.mtan.MtanAuthStepConfig;
import com.airlock.iam.authentication.application.configuration.password.HttpBasicAuthenticationStepConfig;
import com.airlock.iam.authentication.application.configuration.password.MandatoryPasswordChangeStepConfig;
import com.airlock.iam.authentication.application.configuration.password.PasswordAuthenticationStepConfig;
import com.airlock.iam.authentication.application.configuration.password.UsernamePasswordAuthenticationStepConfig;
import com.airlock.iam.authentication.application.configuration.password.UsernamePasswordFidoStepConfig;
import com.airlock.iam.authentication.application.configuration.password.VoluntaryPasswordChangeStepConfig;
import com.airlock.iam.authentication.application.configuration.secretquestions.SecretQuestionsProvisioningStepConfig;
import com.airlock.iam.authentication.application.configuration.vasco.VascoOtpAuthStepConfig;
import com.airlock.iam.authentication.domain.model.airlock2fa.Airlock2FAAuthenticationStep;
import com.airlock.iam.authentication.domain.model.airlock2fa.Airlock2FAUserFactorAuthenticationStep;
import com.airlock.iam.flow.api.application.configuration.step.FlowStepConfig;
import com.airlock.iam.flow.api.domain.model.step.GenericStepAction;
import com.airlock.iam.flow.api.domain.model.step.StepAction;
import com.airlock.iam.flow.shared.application.configuration.acknowledgemessage.AcknowledgeMessageStepConfig;
import com.airlock.iam.flow.shared.application.configuration.airlock2fa.Airlock2FAActivationStepConfig;
import com.airlock.iam.flow.shared.application.configuration.airlock2fa.Airlock2FADeviceEditStepConfig;
import com.airlock.iam.flow.shared.application.configuration.cronto.CrontoActivationStepConfig;
import com.airlock.iam.flow.shared.application.configuration.cronto.CrontoPushActivationStepConfig;
import com.airlock.iam.flow.shared.application.configuration.identification.UserIdentifyingStepConfig;
import com.airlock.iam.flow.shared.application.configuration.matrix.MatrixAuthStepConfig;
import com.airlock.iam.flow.shared.application.configuration.oath.OathOtpActivationStepConfig;
import com.airlock.iam.flow.shared.application.configuration.oath.OathOtpAuthStepConfig;
import com.airlock.iam.flow.shared.application.configuration.radiusotp.RadiusOtpAuthStepConfig;
import com.airlock.iam.flow.shared.application.configuration.selection.SelectionStepConfig;
import com.airlock.iam.flow.shared.application.configuration.step.FidoCredentialDisplayNameChangeStepConfig;
import com.airlock.iam.flow.shared.application.configuration.step.FidoRegistrationStepConfig;
import com.airlock.iam.flow.shared.application.configuration.step.MtanVerificationStepConfig;
import com.airlock.iam.flow.shared.application.configuration.step.email.EmailChangeVerificationStepConfig;
import com.airlock.iam.flow.shared.application.configuration.termsofservice.TermsOfServiceStepConfig;
import com.airlock.iam.flow.shared.domain.model.cronto.CrontoActivationStep;
import com.airlock.iam.flow.shared.domain.model.cronto.CrontoCheckingStep;
import com.airlock.iam.flow.shared.domain.model.cronto.CrontoPushActivationStep;
import com.airlock.iam.flow.shared.domain.model.mtan.MtanOtpCheckingStep;
import com.airlock.iam.flow.shared.domain.model.step.access.AccessFlowStep;
import com.airlock.iam.flow.shared.domain.model.step.acknowledgemessage.AcknowledgeMessageStep;
import com.airlock.iam.flow.shared.domain.model.step.mtan.MtanVerificationStep;
import com.airlock.iam.flow.ui.api.domain.model.step.KnownStepUiPath;
import com.airlock.iam.flow.ui.infrastructure.service.ui.CreatableScreenConfigsDefinition;
import com.airlock.iam.flow.ui.infrastructure.service.ui.GlobalUiAttributes;
import com.airlock.iam.flow.ui.infrastructure.service.ui.ScreenConfig;
import com.airlock.iam.flow.ui.infrastructure.service.ui.StepUiSettingsCreator;
import com.airlock.iam.flow.ui.infrastructure.service.ui.StepUiSettingsFactory;
import com.airlock.iam.flow.ui.infrastructure.settings.SimpleDefaultUiSettings;
import com.airlock.iam.flow.ui.infrastructure.settings.StepUiSettings;
import com.airlock.iam.flow.ui.infrastructure.settings.annotation.DefaultUiCreator;
import com.airlock.iam.oauth2.application.configuration.OAuth2ConsentStepConfig;
import com.airlock.iam.oauth2.application.configuration.OAuth2SsoStepConfig;
import com.airlock.iam.oauth2.domain.model.provider.OAuth2ConsentStep;
import com.airlock.iam.saml2.application.configuration.sp.Saml2UserIdentifyingStepConfig;
import com.airlock.iam.ssi.application.configuration.step.SsiAuthenticationStepConfig;
import com.airlock.iam.ssi.application.configuration.step.SsiPasswordlessAuthenticationStepConfig;
import com.airlock.iam.ssi.application.configuration.step.SsiPersistedIssuanceStepConfig;
import com.airlock.iam.ssi.application.configuration.step.SsiVerificationStepConfig;
import com.airlock.iam.ssi.domain.model.step.SsiIssuanceStep;
import com.airlock.iam.ssi.domain.model.step.SsiVerificationStep;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Map;
import java.util.Set;
import java.util.function.BiFunction;

@DefaultUiCreator(DefaultAuthenticationStepUiSettingsCreator.AuthenticationStepUiSettingsCreatorScreenConfigDefinition.class)
public final class DefaultAuthenticationStepUiSettingsCreator implements StepUiSettingsCreator {
   private static final String OLD_PASSWORD_REQUIRED_KEY = "oldPasswordRequired";
   private static final String SHOW_APP_DEVICE_ACTIVATION_LINK = "showAppDeviceActivationLink";
   private static final String SHOW_APP_APPROVAL_LINK = "showAppApprovalLink";
   private final Provider<GlobalUiAttributes> globalUiAttributes;
   private static final Map<ScreenConfig, BiFunction<FlowStepConfig, GlobalUiAttributes, StepUiSettings>> DEFAULT_UIS = Map.ofEntries(
      Map.entry(ScreenConfig.screenConfigOf(SelectionStepConfig.class), SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.SELECTION)),
      Map.entry(
         ScreenConfig.screenConfigOf(MigrationSelectionStepConfig.class), SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.MIGRATION_SELECTION)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(Airlock2FAActivationStepConfig.class),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.AIRLOCK_2FA_MIGRATION, u -> Map.of("showAppDeviceActivationLink", true))
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(Airlock2FAAdditionalActivationStepConfig.class),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.AIRLOCK_2FA_ADDITIONAL_ACTIVATION, u -> Map.of("showAppDeviceActivationLink", true))
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(Airlock2FADeviceEditStepConfig.class),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.AIRLOCK_2FA_DEVICE_EDIT)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(
            Airlock2FAUserFactorAuthenticationStepConfig.class, Airlock2FAAuthenticationStep.Airlock2FAAuthenticationStepAction.AIRLOCK_2FA_POLLING_REQUIRED
         ),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.AIRLOCK_2FA_CHALLENGE_ONLY, u -> Map.of("showAppApprovalLink", true))
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(
            Airlock2FAUserFactorAuthenticationStepConfig.class,
            Airlock2FAUserFactorAuthenticationStep.Airlock2FAUserFactorAuthenticationStepAction.AIRLOCK_2FA_POLLING_OR_OFFLINE_REQUIRED
         ),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.AIRLOCK_2FA_CHALLENGE, u -> Map.of("showAppApprovalLink", true))
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(
            Airlock2FAUserFactorAuthenticationStepConfig.class,
            Airlock2FAUserFactorAuthenticationStep.Airlock2FAUserFactorAuthenticationStepAction.AIRLOCK_2FA_PASSCODE_REQUIRED
         ),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.AIRLOCK_2FA_PASSCODE)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(
            Airlock2FAUserFactorAuthenticationStepConfig.class,
            Airlock2FAUserFactorAuthenticationStep.Airlock2FAUserFactorAuthenticationStepAction.AIRLOCK_2FA_DEVICE_CHOICE_REQUIRED
         ),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.AIRLOCK_2FA_DEVICE_SELECTION)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(
            Airlock2FAUserFactorAuthenticationStepConfig.class,
            Airlock2FAUserFactorAuthenticationStep.Airlock2FAUserFactorAuthenticationStepAction.AIRLOCK_2FA_QR_CODE_OTP_REQUIRED
         ),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.AIRLOCK_2FA_QRCODE_ONLY)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(
            Airlock2FAUserFactorAuthenticationStepConfig.class,
            Airlock2FAUserFactorAuthenticationStep.Airlock2FAUserFactorAuthenticationStepAction.AIRLOCK_2FA_PASSCODE_OR_QR_CODE_OTP_REQUIRED
         ),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.AIRLOCK_2FA_PASSCODE)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(Airlock2FAUsernamelessQrCodeAuthenticationStepConfig.class),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.AIRLOCK_2FA_USERNAMELESS)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(CrontoActivationStepConfig.class, CrontoActivationStep.CrontoActivationStepActions.CRONTO_ACTIVATION_START_REQUIRED),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.CRONTO_ACTIVATION)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(
            CrontoActivationStepConfig.class, CrontoActivationStep.CrontoActivationStepActions.CRONTO_ACTIVATION_START_WITHOUT_LETTER_REQUIRED
         ),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.CRONTO_ACTIVATION_ON_SCREEN)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(CrontoActivationStepConfig.class, CrontoActivationStep.CrontoActivationStepActions.CRONTO_ACTIVATION_COMPLETE_REQUIRED),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.CRONTO_ACTIVATION_COMPLETE)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(
            CrontoPushActivationStepConfig.class, CrontoPushActivationStep.CrontoPushActivationStepActions.CRONTO_PUSH_ACTIVATION_POSSIBLE
         ),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.CRONTO_PUSH_ACTIVATION)
      ),
      Map.entry(ScreenConfig.screenConfigOf(CrontoAuthStepConfig.class), SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.CRONTO_CHALLENGE)),
      Map.entry(
         ScreenConfig.screenConfigOf(CrontoAuthStepConfig.class, CrontoCheckingStep.CrontoAuthStepActions.CRONTO_DEVICE_CHOICE_REQUIRED),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.CRONTO_SELECTION)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(LegacyEmailOtpAuthenticationStepConfig.class), SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.OTP_EMAIL)
      ),
      Map.entry(ScreenConfig.screenConfigOf(EmailOtpAuthenticationStepConfig.class), SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.EMAIL_OTP)),
      Map.entry(
         ScreenConfig.screenConfigOf(EmailChangeVerificationStepConfig.class),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.EMAIL_VERIFICATION_OTP_CHECK)
      ),
      Map.entry(ScreenConfig.screenConfigOf(RadiusOtpAuthStepConfig.class), SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.OTP)),
      Map.entry(
         ScreenConfig.screenConfigOf(MandatoryPasswordChangeStepConfig.class),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(
            KnownStepUiPath.PASSWORD_CHANGE, c -> Map.of("oldPasswordRequired", ((MandatoryPasswordChangeStepConfig)c).isOldPasswordRequired())
         )
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(VoluntaryPasswordChangeStepConfig.class),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(
            KnownStepUiPath.PASSWORD_CHANGE, c -> Map.of("oldPasswordRequired", ((VoluntaryPasswordChangeStepConfig)c).isOldPasswordRequired())
         )
      ),
      Map.entry(ScreenConfig.screenConfigOf(TermsOfServiceStepConfig.class), SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.TERMS_OF_SERVICE)),
      Map.entry(ScreenConfig.screenConfigOf(MatrixAuthStepConfig.class), SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.MATRIX)),
      Map.entry(
         ScreenConfig.screenConfigOf(MtanAuthStepConfig.class, MtanOtpCheckingStep.MtanAuthStepActions.MTAN_OTP_REQUIRED),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.MTAN)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(MtanAuthStepConfig.class, MtanOtpCheckingStep.MtanAuthStepActions.MTAN_TOKEN_CHOICE_REQUIRED),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.MTAN_SELECTION)
      ),
      Map.entry(ScreenConfig.screenConfigOf(OathOtpAuthStepConfig.class), SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.OATH_OTP)),
      Map.entry(
         ScreenConfig.screenConfigOf(OathOtpActivationStepConfig.class), SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.OATH_OTP_ACTIVATION)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(UsernamePasswordAuthenticationStepConfig.class), SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.PASSWORD)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(UsernamePasswordFidoStepConfig.class),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.PASSWORD_FIDO_CONDITIONAL)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(SecretQuestionsProvisioningStepConfig.class),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.SECRET_QUESTIONS)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(MtanVerificationStepConfig.class, MtanVerificationStep.MtanVerificationStepActions.MTAN_REGISTRATION_OTP_REQUIRED),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.MTAN_REGISTRATION_VERIFICATION_OTP)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(MtanVerificationStepConfig.class, MtanVerificationStep.MtanVerificationStepActions.MTAN_REGISTRATION_IAK_REQUIRED),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.MTAN_REGISTRATION_VERIFICATION_IAK)
      ),
      Map.entry(ScreenConfig.screenConfigOf(VascoOtpAuthStepConfig.class), SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.VASCO_OTP)),
      Map.entry(ScreenConfig.screenConfigOf(FidoAuthenticationStepConfig.class), SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.FIDO)),
      Map.entry(
         ScreenConfig.screenConfigOf(FidoPasswordlessAuthenticationStepConfig.class),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.FIDO_PASSWORDLESS)
      ),
      Map.entry(ScreenConfig.screenConfigOf(FidoRegistrationStepConfig.class), SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.FIDO_REGISTRATION)),
      Map.entry(
         ScreenConfig.screenConfigOf(FidoCredentialDisplayNameChangeStepConfig.class),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.FIDO_CREDENTIAL_EDIT)
      ),
      Map.entry(ScreenConfig.screenConfigOf(AcknowledgeMessageStepConfig.class), SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.MESSAGE)),
      Map.entry(ScreenConfig.screenConfigOf(OAuth2SsoStepConfig.class), SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.OAUTH2_CLIENT_REDIRECT)),
      Map.entry(
         ScreenConfig.screenConfigOf(OAuth2SsoStepConfig.class, AcknowledgeMessageStep.AcknowledgeMessageStepActions.MESSAGE_ACKNOWLEDGMENT_REQUIRED),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.MESSAGE)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(
            OAuth2ConsentStepConfig.class, OAuth2ConsentStep.OAuth2ConsentStepActions.OAUTH2_AUTHORIZATION_SERVER_LOCAL_CONSENT_REQUIRED
         ),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.OAUTH2_CONSENT)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(
            OAuth2ConsentStepConfig.class, OAuth2ConsentStep.OAuth2ConsentStepActions.OAUTH2_AUTHORIZATION_SERVER_REMOTE_CONSENT_REQUIRED
         ),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.OAUTH2_CONSENT_REDIRECT)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(Saml2UserIdentifyingStepConfig.class, GenericStepAction.NAVIGATION_REQUIRED),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.NAVIGATION_REDIRECT)
      ),
      Map.entry(ScreenConfig.screenConfigOf(UserIdentifyingStepConfig.class), SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.USERNAME)),
      Map.entry(
         ScreenConfig.screenConfigOf(UserIdentifyingFidoStepConfig.class),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.USERNAME_FIDO_CONDITIONAL)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(PasswordAuthenticationStepConfig.class), SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.PASSWORD_ONLY)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(HttpBasicAuthenticationStepConfig.class, AccessFlowStep.AccessStepActions.ACCESS_CALL_REQUIRED),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.ACCESS)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(KerberosAuthStepConfig.class, AccessFlowStep.AccessStepActions.ACCESS_CALL_REQUIRED),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.ACCESS)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(SsiVerificationStepConfig.class, SsiVerificationStep.SsiVerificationActions.SSI_PROOF_VERIFICATION_REQUIRED),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.SSI_VERIFICATION)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(SsiAuthenticationStepConfig.class, SsiVerificationStep.SsiVerificationActions.SSI_PROOF_VERIFICATION_REQUIRED),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.SSI_VERIFICATION)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(SsiPasswordlessAuthenticationStepConfig.class, SsiVerificationStep.SsiVerificationActions.SSI_PROOF_VERIFICATION_REQUIRED),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.SSI_VERIFICATION)
      ),
      Map.entry(
         ScreenConfig.screenConfigOf(SsiPersistedIssuanceStepConfig.class, SsiIssuanceStep.SsiIssuanceActions.SSI_CREDENTIAL_ACCEPTANCE_REQUIRED),
         SimpleDefaultUiSettings.defaultFlowUiWithPath(KnownStepUiPath.SSI_ISSUANCE)
      )
   );

   @Inject
   public DefaultAuthenticationStepUiSettingsCreator(Provider<GlobalUiAttributes> globalUiAttributes) {
      this.globalUiAttributes = globalUiAttributes;
   }

   public StepUiSettings createUiSettings(FlowStepConfig stepConfig, StepAction action) {
      return StepUiSettingsFactory.createStepUiSettings(stepConfig, (GlobalUiAttributes)this.globalUiAttributes.get(), action, DEFAULT_UIS);
   }

   public static final class AuthenticationStepUiSettingsCreatorScreenConfigDefinition implements CreatableScreenConfigsDefinition {
      public Set<ScreenConfig> creatableScreenConfigs() {
         return DefaultAuthenticationStepUiSettingsCreator.DEFAULT_UIS.keySet();
      }
   }
}
