package com.airlock.iam.saml2.infrastructure.util;

import com.airlock.iam.common.api.domain.model.store.user.UserStore;
import com.airlock.iam.plugin.api.config.ConfigurationContext;
import com.airlock.iam.saml2.application.configuration.SamlConfig;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Supplier;

public final class Saml2LoginappConfigProvider {
   private static Function<ConfigurationContext, Optional<SamlConfig>> configProvider;
   private static Function<ConfigurationContext, Optional<UserStore>> storeProvider;
   private static Supplier<Set<ConfigurationContext>> configContextsProvider;

   public static Optional<SamlConfig> getSamlConfig(ConfigurationContext context) {
      return configProvider.apply(context);
   }

   public static Optional<UserStore> getUserStore(ConfigurationContext context) {
      return storeProvider.apply(context);
   }

   public static Set<ConfigurationContext> getAllLoginappConfigurationContexts() {
      return configContextsProvider.get();
   }

   public static void setSamlConfigProvider(Function<ConfigurationContext, Optional<SamlConfig>> provider) {
      configProvider = provider;
   }

   public static void setUserStoreProvider(Function<ConfigurationContext, Optional<UserStore>> provider) {
      storeProvider = provider;
   }

   public static void setConfigContextsProvider(Supplier<Set<ConfigurationContext>> provider) {
      configContextsProvider = provider;
   }

   private Saml2LoginappConfigProvider() {
      throw new AssertionError();
   }
}
