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

import com.airlock.iam.flow.shared.api.domain.model.session.UserSession;
import com.airlock.iam.flow.shared.application.service.RoleRemovalService;
import com.airlock.iam.flow.shared.application.service.RoleRemovalServiceImpl;
import com.airlock.iam.flow.shared.domain.model.session.ProcessedRemovedRoles;
import com.airlock.iam.flow.shared.domain.model.session.ProcessedRemovedRolesAttribute;
import com.google.inject.Exposed;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;
import java.util.Optional;

public final class RoleRemovalServiceModule extends PrivateModule {
   @Exposed
   @Provides
   ProcessedRemovedRoles provideProcessedRemovedRoles(UserSession userSession) {
      Optional<ProcessedRemovedRolesAttribute> attribute = userSession.findUserSessionAttribute(ProcessedRemovedRolesAttribute.class);
      if (attribute.isEmpty()) {
         ProcessedRemovedRoles removedRoles = new ProcessedRemovedRoles();
         userSession.addUserSessionAttribute(new ProcessedRemovedRolesAttribute(removedRoles));
         return removedRoles;
      } else {
         return attribute.get().getProcessedRemovedRoles();
      }
   }

   protected void configure() {
      this.bind(RoleRemovalService.class).to(RoleRemovalServiceImpl.class);
      this.expose(RoleRemovalService.class);
   }
}
