package com.airlock.iam.admin.infrastructure.factory.prot;

import com.airlock.iam.admin.application.configuration.users.UsersConfiguration;
import com.airlock.iam.admin.application.service.authmethod.AuthenticationMethodService;
import com.airlock.iam.admin.application.service.user.bulkchanges.token.BulkTokenMigrationSettings;
import com.airlock.iam.base.api.domain.model.exception.ServiceConfigurationException;
import com.google.inject.Exposed;
import com.google.inject.PrivateModule;
import com.google.inject.Provides;
import java.util.HashSet;
import java.util.Optional;

public class BulkTokenMigrationSettingsModule extends PrivateModule {
   @Provides
   @Exposed
   BulkTokenMigrationSettings settings(Optional<UsersConfiguration> usersConfiguration, AuthenticationMethodService authMethodService) {
      ServiceConfigurationException.checkPresent(usersConfiguration, "users not configured");
      ServiceConfigurationException.checkTrue(usersConfiguration.get().isAllowBulkChanges(), "Bulk changes are disabled");
      return new BulkTokenMigrationSettings(
         usersConfiguration.get().isEnableMultipleNextAuthMethods(), new HashSet<>(authMethodService.getAllPossibleNextAuthMethods())
      );
   }

   protected void configure() {
   }
}
