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

import com.airlock.iam.common.infrastructure.factory.uri.AbsoluteExternalViewUriFactory;
import com.airlock.iam.saml2.application.configuration.SamlConfig;
import com.airlock.iam.saml2.domain.model.Saml2ErrorUri;
import com.airlock.iam.saml2.infrastructure.idp.Saml2IdpSpaUrls;
import com.google.inject.Exposed;
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 class Saml2ErrorUriModule extends PrivateModule {
   @Provides
   @Exposed
   @RequestScoped
   Saml2ErrorUri provideErrorUri(Optional<SamlConfig> samlConfig, AbsoluteExternalViewUriFactory externalUriFactory) {
      URI errorUri = samlConfig.<URI>map(sc -> sc.getSamlFederationConfig().getErrorPageUri()).orElse(Saml2IdpSpaUrls.UI_ERROR_URI.uri());
      return new Saml2ErrorUri(externalUriFactory.createAbsoluteUri(errorUri));
   }

   protected void configure() {
   }
}
