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.plugins.SAML2ServiceProviderAdapter;
import com.sun.identity.saml2.plugins.SPAuthnContextMapper;
import com.sun.identity.saml2.protocol.AuthnRequest;
import com.sun.identity.saml2.protocol.LogoutRequest;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

public final class SPCache {
   public static Hashtable<String, SPAuthnContextMapper> authCtxObjHash = new Hashtable<>();
   public static Hashtable<String, Map<String, Object>> authContextHash = new Hashtable<>();
   public static Hashtable<String, SAML2ServiceProviderAdapter> spAdapterClassCache = new Hashtable<>();

   private SPCache() {
   }

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

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

   public static Saml2DataMap<List<SPFedSession>> fedSessionListsByNameIDInfoKey() {
      return Saml2DataMapProvider.getDataMap(Saml2DataMapProvider.DataMapId.SP_FED_SESSION_LISTS_BY_NAME_ID);
   }

   public static Saml2DataMap<LogoutRequest> logoutRequestIDHash() {
      return Saml2DataMapProvider.getDataMap(Saml2DataMapProvider.DataMapId.SP_LOGOUT_REQUEST_ID_HASH);
   }

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

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

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