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

import com.airlock.iam.base.api.infrastructure.plugin.PluginConfigToLogic;
import com.airlock.iam.login.domain.model.targetapp.WafCredentialProvider;
import com.airlock.iam.saml2.application.configuration.Saml2FlowIdpConfig;
import com.airlock.iam.saml2.domain.service.Saml2SloCredentialService;
import com.airlock.iam.saml2.infrastructure.service.Saml2SloCredentialServiceImpl;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;
import com.google.inject.servlet.RequestScoped;
import java.util.Optional;

public final class Saml2SloCredentialServiceModule extends PrivateModule {
   @Provides
   @RequestScoped
   Optional<WafCredentialProvider> provideSloTemporaryCredential(Optional<Saml2FlowIdpConfig> config, PluginConfigToLogic toLogic) {
      return config.flatMap(Saml2FlowIdpConfig::getTemporarySloCredentialProvider).map(toLogic::getLogic);
   }

   protected void configure() {
      this.bind(Saml2SloCredentialService.class).to(Saml2SloCredentialServiceImpl.class).in(RequestScoped.class);
      this.expose(Saml2SloCredentialService.class);
   }
}
