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

import com.airlock.iam.authentication.application.configuration.AuthenticationFlowConfigSpec;
import com.airlock.iam.authentication.application.configuration.targetapp.TargetApplicationsConfig;
import com.airlock.iam.common.application.configuration.templock.TemporaryLockingConfig;
import com.airlock.iam.flow.application.configuration.FlowConfig;
import com.google.inject.Exposed;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;
import java.util.Optional;

public class AuthFlowTemporaryLockingConfigModule extends PrivateModule {
   @Provides
   @Exposed
   Optional<TemporaryLockingConfig> provideTemporaryLockingConfig(Optional<TargetApplicationsConfig> flowAuthenticationConfig, FlowConfig flowConfig) {
      return !this.isTemporaryLockingActive(flowConfig)
         ? Optional.empty()
         : flowAuthenticationConfig.flatMap(TargetApplicationsConfig::getTemporaryLockingConfig);
   }

   private boolean isTemporaryLockingActive(FlowConfig flowConfig) {
      return flowConfig instanceof AuthenticationFlowConfigSpec authFlowConfig && authFlowConfig.isTemporaryLockingActive();
   }

   protected void configure() {
   }
}
