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

import com.airlock.iam.base.api.domain.model.exception.ServiceConfigurationException;
import com.airlock.iam.saml2.application.configuration.SamlConfig;
import com.airlock.iam.saml2.application.service.sp.Saml2SpAssertionConsumerService;
import com.airlock.iam.saml2.infrastructure.sp.Saml2SpAssertionConsumerServiceImpl;
import com.airlock.iam.saml2.infrastructure.sp.Saml2SpSpaUrls;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;
import com.google.inject.servlet.RequestScoped;
import java.net.URI;
import java.util.Optional;

public final class Saml2SpAssertionConsumerServiceModule extends PrivateModule {
   @Provides
   URI provideUiSsoContinuationUri(Optional<SamlConfig> samlConfig) {
      return ServiceConfigurationException.checkPresent(samlConfig, "No SAML2 configuration").getCustomSpInitUri().orElse(Saml2SpSpaUrls.UI_SSO_INIT_URI.uri());
   }

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