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

import com.airlock.iam.base.api.domain.model.exception.FailureException;
import com.airlock.iam.common.domain.model.session.IamSession;
import com.airlock.iam.common.domain.model.session.SessionId;
import com.airlock.iam.common.domain.service.session.CorrelationIdService;
import com.airlock.iam.common.infrastructure.session.CachingCorrelationIdService;
import com.google.inject.Exposed;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;
import com.google.inject.servlet.RequestScoped;

public final class ApiPolicyIamSessionModule extends PrivateModule {
   @Provides
   @RequestScoped
   @Exposed
   SessionId provideSessionId(CorrelationIdService correlationIdService) {
      return correlationIdService.determineNewSessionId();
   }

   @Provides
   @Exposed
   IamSession provideIamSession() {
      throw new FailureException("IAM Session should never be used in API Policy Service.");
   }

   protected void configure() {
      this.bind(CorrelationIdService.class).to(CachingCorrelationIdService.class).in(RequestScoped.class);
   }
}
