package com.sun.identity.saml2.profile;

import com.airlock.iam.openfedlib.saml2.state.Saml2DataMap;
import com.airlock.iam.openfedlib.saml2.state.Saml2DataMapProvider;
import com.sun.identity.saml2.assertion.AuthnContext;
import com.sun.identity.saml2.plugins.IDPAccountMapper;
import com.sun.identity.saml2.plugins.IDPAttributeMapper;
import com.sun.identity.saml2.plugins.IDPAuthnContextMapper;
import com.sun.identity.saml2.plugins.IDPECPSessionMapper;
import com.sun.identity.saml2.protocol.AuthnRequest;
import com.sun.identity.saml2.protocol.Response;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;

public class IDPCache {
   public static Hashtable<String, IDPAttributeMapper> idpAttributeMapperCache = new Hashtable<>();
   public static Hashtable<String, IDPAccountMapper> idpAccountMapperCache = new Hashtable<>();
   public static Hashtable<String, IDPAuthnContextMapper> idpAuthnContextMapperCache = new Hashtable<>();
   public static Hashtable<String, IDPECPSessionMapper> idpECPSessionMapperCache = new Hashtable<>();
   public static Hashtable<String, Map<String, Set<String>>> classRefSchemesHash = new Hashtable<>();
   public static Hashtable<String, Map<String, Object>> classRefLevelHash = new Hashtable<>();
   public static Hashtable<String, String> defaultClassRefHash = new Hashtable<>();
   public static Hashtable<String, Map<String, String>> formatAttributeHash = new Hashtable<>();

   private IDPCache() {
   }

   public static Saml2DataMap<AuthnRequest> authnRequestCache() {
      return Saml2DataMapProvider.getDataMap(Saml2DataMapProvider.DataMapId.IDP_AUTHN_REQUEST_CACHE);
   }

   public static Saml2DataMap<AuthnContext> idpAuthnContextCache() {
      return Saml2DataMapProvider.getDataMap(Saml2DataMapProvider.DataMapId.IDP_IDP_AUTHN_CONTEXT_CACHE);
   }

   public static Saml2DataMap<String> relayStateCache() {
      return Saml2DataMapProvider.getDataMap(Saml2DataMapProvider.DataMapId.IDP_RELAY_STATE_CACHE);
   }

   public static Saml2DataMap<IDPSession> idpSessionsByIndices() {
      return Saml2DataMapProvider.getDataMap(Saml2DataMapProvider.DataMapId.IDP_IDP_SESSIONS_BY_INDICES);
   }

   public static Saml2DataMap<Response> responsesByArtifacts() {
      return Saml2DataMapProvider.getDataMap(Saml2DataMapProvider.DataMapId.IDP_RESPONSES_BY_ARTIFACT);
   }

   public static Saml2DataMap<Set<AuthnContext>> authnContextCache() {
      return Saml2DataMapProvider.getDataMap(Saml2DataMapProvider.DataMapId.IDP_AUTHN_CONTEXT_CACHE);
   }

   public static Saml2DataMap<String> isSessionUpgradeCache() {
      return Saml2DataMapProvider.getDataMap(Saml2DataMapProvider.DataMapId.IDP_IS_SESSION_UPGRADE_CACHE);
   }

   public static Saml2DataMap<IDPSession> oldIDPSessionCache() {
      return Saml2DataMapProvider.getDataMap(Saml2DataMapProvider.DataMapId.IDP_OLD_IDP_SESSION_CACHE);
   }

   public static void clear() {
      if (classRefSchemesHash != null && !classRefSchemesHash.isEmpty()) {
         classRefSchemesHash.clear();
      }

      if (classRefLevelHash != null && !classRefLevelHash.isEmpty()) {
         classRefLevelHash.clear();
      }

      if (defaultClassRefHash != null && !defaultClassRefHash.isEmpty()) {
         defaultClassRefHash.clear();
      }

      formatAttributeHash.clear();
   }
}
