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

import com.airlock.iam.authentication.application.configuration.targetapp.TargetApplicationsConfig;
import com.airlock.iam.authentication.application.service.AuthenticationInformationService;
import com.airlock.iam.base.api.infrastructure.plugin.PluginConfigToLogic;
import com.airlock.iam.flow.api.domain.model.step.FlowCondition;
import com.airlock.iam.flow.domain.model.selection.condition.AlwaysFalseCondition;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;
import java.util.Optional;

public class AuthenticationInformationServiceModule extends PrivateModule {
   private static final AlwaysFalseCondition ALWAYS_FALSE_CONDITION = new AlwaysFalseCondition();

   @Provides
   FlowCondition provideAuthenticationInformationAccessibleCondition(Optional<TargetApplicationsConfig> config, PluginConfigToLogic pluginConfigToLogic) {
      return config.isEmpty() ? ALWAYS_FALSE_CONDITION : pluginConfigToLogic.getLogic(config.get().getAuthenticationInformationAccessibleCondition());
   }

   protected void configure() {
      this.bind(AuthenticationInformationService.class);
      this.expose(AuthenticationInformationService.class);
   }
}
