package com.airlock.iam.saml2.infrastructure.sp.logout;

import com.airlock.iam.openfedlib.saml2.state.Saml2DataMap;
import com.airlock.iam.saml2.domain.model.session.FlowFederationSession;
import com.airlock.iam.saml2.domain.model.sp.logout.Saml2SpSloContinuationId;
import com.sun.identity.saml2.profile.LogoutRequestDataContainer;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Optional;

public final class Saml2IdpInitiatedSloCacheImpl implements Saml2IdpInitiatedSloCache {
   private final Provider<Saml2DataMap<Saml2IdpInitiatedSloCache.Saml2IdpInitiatedSloCacheEntry>> dataMap;

   @Inject
   public Saml2IdpInitiatedSloCacheImpl(Provider<Saml2DataMap<Saml2IdpInitiatedSloCache.Saml2IdpInitiatedSloCacheEntry>> dataMap) {
      this.dataMap = dataMap;
   }

   @Override
   public Saml2SpSloContinuationId save(FlowFederationSession session, LogoutRequestDataContainer logoutData) {
      Saml2SpSloContinuationId id = Saml2SpSloContinuationId.newSloContinuationId();
      ((Saml2DataMap)this.dataMap.get()).put(id.value(), new Saml2IdpInitiatedSloCache.Saml2IdpInitiatedSloCacheEntry(session, logoutData));
      return id;
   }

   @Override
   public Optional<Saml2IdpInitiatedSloCache.Saml2IdpInitiatedSloCacheEntry> readOnce(Saml2SpSloContinuationId id) {
      return Optional.ofNullable((Saml2IdpInitiatedSloCache.Saml2IdpInitiatedSloCacheEntry)((Saml2DataMap)this.dataMap.get()).remove(id.value()));
   }
}
