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

import com.airlock.iam.common.domain.model.session.IamSessionLock;
import com.airlock.iam.common.domain.model.session.ReadOnlyIamSessionData;
import com.airlock.iam.common.infrastructure.request.RequestMethodInfo;
import com.google.inject.Exposed;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;
import com.google.inject.servlet.RequestScoped;
import jakarta.inject.Provider;
import java.util.Optional;

public final class IamSessionLockModule extends PrivateModule {
   @Provides
   @Exposed
   @RequestScoped
   IamSessionLock provideIamSessionLock(RequestMethodInfo requestInfo, Provider<Optional<ReadOnlyIamSessionData>> sessionData) {
      return !requestInfo.methodExists()
         ? new IamSessionLock(false)
         : new IamSessionLock(((Optional)sessionData.get()).map(ReadOnlyIamSessionData::lockAcquired).orElse(true));
   }

   protected void configure() {
   }
}
