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

import com.airlock.iam.openfedlib.saml2.state.Saml2DataMap;
import com.airlock.iam.saml2.domain.model.idp.logout.Saml2SpInitiatedSloAttributes;
import com.airlock.iam.saml2.domain.model.idp.logout.Saml2SpInitiatedSloId;
import com.airlock.iam.saml2.domain.model.session.FlowFederationSession;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Optional;

public final class Saml2SpInitiatedSloCacheImpl implements Saml2SpInitiatedSloCache {
   private final Provider<Saml2DataMap<Saml2SpInitiatedSloCache.Saml2SpInitiatedSloCacheEntry>> dataMap;

   @Inject
   public Saml2SpInitiatedSloCacheImpl(Provider<Saml2DataMap<Saml2SpInitiatedSloCache.Saml2SpInitiatedSloCacheEntry>> dataMap) {
      this.dataMap = dataMap;
   }

   @Override
   public Saml2SpInitiatedSloId save(FlowFederationSession session, Saml2SpInitiatedSloAttributes attributes) {
      Saml2SpInitiatedSloId id = Saml2SpInitiatedSloId.newSpInitiatedSloId();
      ((Saml2DataMap)this.dataMap.get()).put(id.value(), new Saml2SpInitiatedSloCache.Saml2SpInitiatedSloCacheEntry(session, attributes));
      return id;
   }

   @Override
   public Optional<Saml2SpInitiatedSloCache.Saml2SpInitiatedSloCacheEntry> readOnce(Saml2SpInitiatedSloId sloId) {
      return Optional.ofNullable((Saml2SpInitiatedSloCache.Saml2SpInitiatedSloCacheEntry)((Saml2DataMap)this.dataMap.get()).remove(sloId.value()));
   }
}
