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.Saml2IdpInitiatedSloId;
import com.airlock.iam.saml2.domain.model.session.FlowFederationSession;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Optional;

public final class Saml2IdpInitiatedSloFederationSessionCacheImpl implements Saml2IdpInitiatedSloFederationSessionCache {
   private final Provider<Saml2DataMap<FlowFederationSession>> dataMap;

   @Inject
   public Saml2IdpInitiatedSloFederationSessionCacheImpl(Provider<Saml2DataMap<FlowFederationSession>> dataMap) {
      this.dataMap = dataMap;
   }

   @Override
   public Saml2IdpInitiatedSloId save(FlowFederationSession session) {
      Saml2IdpInitiatedSloId id = Saml2IdpInitiatedSloId.newIdpInitiatedSloId();
      ((Saml2DataMap)this.dataMap.get()).put(id.value(), session);
      return id;
   }

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