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

import com.airlock.iam.base.api.domain.model.exception.ServiceConfigurationException;
import com.airlock.iam.saml2.application.configuration.Saml2FlowIdpConfig;
import com.airlock.iam.saml2.application.configuration.SamlConfig;
import com.google.inject.Exposed;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;
import com.google.inject.servlet.RequestScoped;
import java.util.Optional;

public class Saml2ConfigModule extends PrivateModule {
   @Provides
   @Exposed
   @RequestScoped
   Optional<Saml2FlowIdpConfig> provideOptionalSamlFlowIdpConfig(Optional<SamlConfig> samlConfig) {
      return samlConfig.flatMap(SamlConfig::getSamlFlowIdpSettings);
   }

   @Provides
   @Exposed
   @RequestScoped
   Saml2FlowIdpConfig provideSamlFlowIdpConfig(Optional<Saml2FlowIdpConfig> optionalIdpConfig) {
      return ServiceConfigurationException.checkPresent(optionalIdpConfig, "SAML2 with flow IDP settings is not configured.");
   }

   protected void configure() {
   }
}
