package com.airlock.iam.oauth2.infrastructure.factory.rest;

import com.airlock.iam.oauth2.api.domain.model.OpenIdConnectSessionManagementSettings;
import com.airlock.iam.oauth2.application.configuration.OAuth2AuthorizationServerConfigSpec;
import com.airlock.iam.oauth2.application.service.OpenIdConnectSessionManagementService;
import com.airlock.iam.oauth2.infrastructure.validation.availability.OpenIdConnectSessionManagementAvailability;
import com.google.inject.Exposed;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;
import com.google.inject.servlet.RequestScoped;

public final class OpenIdConnectSessionManagementModule extends PrivateModule {
   @Provides
   @Exposed
   OpenIdConnectSessionManagementAvailability provideSessionManagementAvailability(OAuth2AuthorizationServerConfigSpec configSpec) {
      return new OpenIdConnectSessionManagementAvailability(configSpec.getOpenIDConnectSessionManagement().isPresent());
   }

   @Provides
   OpenIdConnectSessionManagementSettings provideSessionManagementSettings(OAuth2AuthorizationServerConfigSpec configSpec) {
      return configSpec.getOpenIDConnectSessionManagement().orElseThrow();
   }

   protected void configure() {
      this.bind(OpenIdConnectSessionManagementService.class).in(RequestScoped.class);
      this.expose(OpenIdConnectSessionManagementService.class);
   }
}
