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.Saml2SpInitiatedSloId;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import java.util.Optional;

public final class Saml2SpInitiatedSloFederationSessionCacheImpl implements Saml2SpInitiatedSloFederationSessionCache {
   private final Provider<Saml2DataMap<FlowFederationSession>> dataMap;

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

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

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