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

import com.airlock.iam.base.misc.time.TimeProvider;
import com.airlock.iam.common.api.application.configuration.locking.TemporaryLockingStrategyConfig;
import com.airlock.iam.common.api.domain.model.locking.TemporaryLockingStrategy;
import com.airlock.iam.common.application.configuration.templock.TemporaryLockingConfig;
import com.airlock.iam.common.domain.model.templock.TemporaryLocking;
import com.airlock.iam.common.domain.model.templock.TemporaryLockingImpl;
import com.google.inject.Exposed;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;
import java.util.Optional;

public class TemporaryLockingModule extends PrivateModule {
   @Exposed
   @Provides
   Optional<TemporaryLocking> provideTemporaryLocking(Optional<TemporaryLockingConfig> temporaryLockingConfig, TimeProvider timeProvider) {
      return temporaryLockingConfig.map(config -> {
         TemporaryLockingStrategyConfig strategyConfig = config.getTemporaryLockingStrategyConfig();
         TemporaryLockingStrategy strategy = strategyConfig.getLogic();
         return new TemporaryLockingImpl(strategy, timeProvider);
      });
   }

   protected void configure() {
   }
}
