package com.airlock.iam.apipolicyservice.app.infrastructure.factory;

import com.airlock.iam.apipolicyservice.app.infrastructure.Configuration;
import com.airlock.iam.apipolicyservice.application.configuration.ApiPolicyServiceAppConfig;
import com.airlock.iam.common.application.configuration.RestConfigSpec;
import com.airlock.iam.common.application.configuration.gateway.AirlockMicrogatewayConfig;
import com.airlock.iam.core.application.configuration.waf.AirlockGatewayConfig;
import com.airlock.iam.plugin.api.config.ConfigurationContext;
import com.google.inject.Exposed;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;
import com.google.inject.TypeLiteral;
import com.google.inject.servlet.RequestScoped;
import java.util.Optional;

public final class ApiPolicyServiceAppConfigModule extends PrivateModule {
   @Provides
   @RequestScoped
   @Exposed
   ApiPolicyServiceAppConfig provideApiPolicyServiceAppConfig(ConfigurationContext context) {
      return Configuration.getInstance().getApiPolicyServiceAppConfig(context);
   }

   @Provides
   @RequestScoped
   @Exposed
   Optional<RestConfigSpec> provideOptionalApiPolicyServiceAppConfig(ConfigurationContext context) {
      return Optional.of(Configuration.getInstance().getApiPolicyServiceAppConfig(context));
   }

   protected void configure() {
      this.bind(new TypeLiteral<Optional<AirlockGatewayConfig>>() {}).toInstance(Optional.empty());
      this.expose(new TypeLiteral<Optional<AirlockGatewayConfig>>() {});
      this.bind(new TypeLiteral<Optional<AirlockMicrogatewayConfig>>() {}).toInstance(Optional.empty());
      this.expose(new TypeLiteral<Optional<AirlockMicrogatewayConfig>>() {});
   }
}
