package com.airlock.iam.flow.shared.infrastructure.factory;

import com.airlock.iam.base.api.infrastructure.plugin.ModuleForConfig;
import com.airlock.iam.base.api.infrastructure.plugin.PluginConfigToLogic;
import com.airlock.iam.core.misc.util.ticket.TicketEncoder;
import com.airlock.iam.flow.shared.api.domain.model.valueprovider.ValueMapProvider;
import com.airlock.iam.flow.shared.application.configuration.TicketKeyValue;
import com.airlock.iam.flow.shared.application.configuration.TicketStringProviderConfig;
import com.airlock.iam.flow.shared.infrastructure.factory.message.ValueMapProviderListFactory;
import com.google.inject.Exposed;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;
import java.nio.charset.Charset;
import java.time.Duration;
import java.util.List;

@ModuleForConfig(TicketStringProviderConfig.class)
public final class TicketStringProviderModule extends PrivateModule {
   @Exposed
   @Provides
   ValueMapProvider provideValueMapProvider(TicketStringProviderConfig config, PluginConfigToLogic toLogic) {
      return ValueMapProviderListFactory.valueMapProviderList(config.getValueProviders(), toLogic);
   }

   @Exposed
   @Provides
   List<TicketKeyValue> provideTicketKeyValues(TicketStringProviderConfig config) {
      return config.getKeyValues();
   }

   @Exposed
   @Provides
   Duration provideValidity(TicketStringProviderConfig config) {
      return config.getValidity();
   }

   @Exposed
   @Provides
   Charset provideEncodingScheme(TicketStringProviderConfig config) {
      return config.getUrlEncodingScheme();
   }

   @Exposed
   @Provides
   TicketEncoder provideTicketEncoder(TicketStringProviderConfig config) {
      return config.getTicketEncoder();
   }

   protected void configure() {
   }
}
