package com.airlock.iam.authentication.infrastructure.factory;

import com.airlock.iam.authentication.application.configuration.fido.FidoAuthenticationStepActions;
import com.airlock.iam.authentication.application.configuration.fido.FidoAuthenticationStepConfig;
import com.airlock.iam.authentication.application.configuration.fido.FidoAuthenticationStepErrors;
import com.airlock.iam.base.api.infrastructure.plugin.ModuleForConfig;
import com.airlock.iam.factor.domain.model.fido.FidoApprovalData;
import com.airlock.iam.flow.shared.domain.model.fido.FidoCheckingStep;
import com.airlock.iam.flow.shared.domain.model.fido.FidoCheckingStepImpl;
import com.airlock.iam.flow.shared.infrastructure.factory.step.FidoStepModuleForConfigBase;
import com.google.inject.Exposed;
import com.google.inject.Provides;
import java.util.Optional;

@ModuleForConfig(FidoAuthenticationStepConfig.class)
public final class FidoAuthenticationStepModule extends FidoStepModuleForConfigBase {
   @Provides
   @Exposed
   FidoCheckingStep.FidoStepActions provideFidoStepActions() {
      return FidoAuthenticationStepActions.FIDO_AUTHENTICATION_STEP_ACTIONS;
   }

   @Provides
   @Exposed
   FidoCheckingStep.FidoStepErrors provideFidoStepErrors() {
      return FidoAuthenticationStepErrors.FIDO_AUTHENTICATION_STEP_ERRORS;
   }

   @Provides
   @Exposed
   Optional<FidoApprovalData> provideFidoApprovalData() {
      return Optional.empty();
   }

   @Provides
   @Exposed
   FidoCheckingStepImpl.FidoTransactionApprovalStepSettings provideFidoCheckingStepSettings() {
      return FidoCheckingStepImpl.FidoTransactionApprovalStepSettings.builder().verificationLogging(false).build();
   }
}
