package com.airlock.iam.saml2.infrastructure.state;

import com.airlock.iam.base.misc.json.JsonCoding;
import com.sun.identity.saml2.assertion.AuthnContext;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

final class AuthnContextSetSerializer implements Serializer<Set<AuthnContext>> {
   private static final String KEY = "contexts";
   private static final AuthnContextSerializer CONTEXT_SERIALIZER = new AuthnContextSerializer();

   public String mapToStore(Set<AuthnContext> contexts) {
      return JsonCoding.toJson(Map.of("contexts", contexts.stream().map(CONTEXT_SERIALIZER::mapToStore).toList()));
   }

   public Set<AuthnContext> mapFromStore(String serialized) {
      return ((List)JsonCoding.fromJson(serialized).get("contexts"))
         .stream()
         .map(CONTEXT_SERIALIZER::mapFromStore)
         .collect(Collectors.toCollection(HashSet::new));
   }
}
