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

import com.airlock.iam.base.api.infrastructure.plugin.ModuleForConfig;
import com.airlock.iam.base.api.infrastructure.plugin.PluginConfigToLogic;
import com.airlock.iam.common.api.domain.service.Interceptor;
import com.airlock.iam.common.infrastructure.interceptor.InterceptorManager;
import com.airlock.iam.oauth2.application.configuration.OAuth2AuthorizationServerConfigSpec;
import com.airlock.iam.oauth2.domain.model.client.OAuth2ClientLoader;
import com.airlock.iam.techclientreg.application.configuration.step.OAuth2ClientPersistingStepConfig;
import com.google.inject.Exposed;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;
import java.util.List;
import java.util.stream.Collectors;

@ModuleForConfig(OAuth2ClientPersistingStepConfig.class)
public class OAuth2ClientPersistingStepModule extends PrivateModule {
   @Provides
   @Exposed
   InterceptorManager provideInterceptorManager(OAuth2ClientPersistingStepConfig stepConfig, PluginConfigToLogic configToLogic) {
      List<Interceptor> interceptors = stepConfig.getInterceptors().stream().map(config -> configToLogic.getLogic(config)).collect(Collectors.toList());
      return new InterceptorManager(interceptors);
   }

   @Provides
   @Exposed
   OAuth2ClientLoader provideOAuth2ClientLoader(OAuth2AuthorizationServerConfigSpec asConfig) {
      return asConfig.getClientLoader();
   }

   protected void configure() {
   }
}
