package com.airlock.iam.openfedlib.saml2.state;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

public final class Saml2DataMapProvider {
   private static final Map<Saml2DataMapProvider.DataMapId, Saml2DataMap<?>> CACHE = new HashMap<>();

   public static void registerDataMap(Saml2DataMapProvider.DataMapId id, Saml2DataMap<?> map) {
      CACHE.put(id, map);
   }

   public static <V> Saml2DataMap<V> getDataMap(Saml2DataMapProvider.DataMapId id) {
      return Objects.requireNonNull((Saml2DataMap<V>)CACHE.get(id), "Data map with id " + id + " has not yet been registered");
   }

   private Saml2DataMapProvider() {
   }

   public enum DataMapId {
      IDP_AUTHN_CONTEXT_CACHE,
      IDP_AUTHN_REQUEST_CACHE,
      IDP_IDP_AUTHN_CONTEXT_CACHE,
      IDP_IDP_SESSIONS_BY_INDICES,
      IDP_IS_SESSION_UPGRADE_CACHE,
      IDP_OLD_IDP_SESSION_CACHE,
      IDP_RELAY_STATE_CACHE,
      IDP_RESPONSES_BY_ARTIFACT,
      SP_ASSERTION_BY_ID_CACHE,
      SP_FED_SESSION_LISTS_BY_NAME_ID,
      SP_LOGOUT_REQUEST_ID_HASH,
      SP_REQUEST_HASH,
      SP_RELAY_STATE_HASH;
   }
}
