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

import com.airlock.iam.saml2.application.configuration.Saml2FlowIdpConfig;
import com.airlock.iam.saml2.application.service.Saml2LogoutResumeRedirectService;
import com.airlock.iam.saml2.application.service.idp.Saml2SloService;
import com.airlock.iam.saml2.application.service.idp.Saml2SpInitiatedStartSloService;
import com.airlock.iam.saml2.infrastructure.Saml2CommonSpaUrls;
import com.airlock.iam.saml2.infrastructure.idp.Saml2SpInitiatedStartSloServiceImpl;
import com.airlock.iam.saml2.infrastructure.service.Saml2LogoutResumeRedirectServiceImpl;
import com.airlock.iam.saml2.infrastructure.service.idp.logout.Saml2SloServiceImpl;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;
import java.net.URI;

public final class Saml2SloServiceModule extends PrivateModule {
   @Provides
   URI provideLogoutUri(Saml2FlowIdpConfig config) {
      return config.getCustomLogoutUri().orElse(Saml2CommonSpaUrls.UI_LOGOUT_URI.uri());
   }

   protected void configure() {
      this.bind(Saml2SpInitiatedStartSloService.class).to(Saml2SpInitiatedStartSloServiceImpl.class);
      this.bind(Saml2LogoutResumeRedirectService.class).to(Saml2LogoutResumeRedirectServiceImpl.class);
      this.bind(Saml2SloService.class).to(Saml2SloServiceImpl.class);
      this.expose(Saml2SloService.class);
   }
}
