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

import com.airlock.iam.base.api.domain.model.exception.FailureException;
import com.airlock.iam.base.api.infrastructure.plugin.ModuleForConfig;
import com.airlock.iam.oauth2.application.configuration.OAuth2AuthorizationServerConfigSpec;
import com.airlock.iam.oauth2.application.configuration.OpenIdConnectDefaultAcrClaimConfig;
import com.airlock.iam.oauth2.domain.model.settings.OAuth2ApplicationFlowSelectionSettings;
import com.airlock.iam.oauth2.domain.model.settings.OAuth2OidcAuthorizationCodeGrantSettings;
import com.google.inject.Exposed;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;

@ModuleForConfig(OpenIdConnectDefaultAcrClaimConfig.class)
public class OpenIdConnectDefaultAcrClaimModule extends PrivateModule {
   @Provides
   @Exposed
   OAuth2ApplicationFlowSelectionSettings provideFlowSelectionSettings(OAuth2AuthorizationServerConfigSpec configSpec) {
      OAuth2OidcAuthorizationCodeGrantSettings oAuth2AuthorizationCodeGrantSettings = configSpec.getOidcCodeGrantSettings()
         .orElseThrow(() -> new FailureException("No OpenID Connect code grant settings found: Not configured?"));
      return oAuth2AuthorizationCodeGrantSettings.getFlowSelectionSettings();
   }

   protected void configure() {
   }
}
