package com.airlock.iam.common.infrastructure.session;

import com.airlock.iam.base.api.domain.model.mapification.MapifiedValues;
import com.airlock.iam.base.domain.model.mapification.MapifiedValuesBuilder;
import com.airlock.iam.common.domain.model.session.SessionNonce;
import com.airlock.iam.common.domain.model.session.SessionNonces;
import java.time.Instant;
import java.util.stream.Collectors;

public final class SessionNoncesMapifier {
   private static final String CURRENT_NONCE_KEY = "current";
   private static final String PREVIOUS_NONCES_KEY = "previous";

   public static MapifiedValues mapifyNonces(SessionNonces nonces) {
      return MapifiedValuesBuilder.mapifiedValues()
         .put("current", nonces.current().nonce())
         .put("previous", nonces.previous().entrySet().stream().collect(Collectors.toMap(e -> e.getKey().nonce(), e -> e.getValue().toEpochMilli())))
         .build();
   }

   public static SessionNonces demapifyNonces(MapifiedValues values) {
      MapifiedValues previous = values.getValues("previous");
      return new SessionNonces(
         values.simpleValue("current", SessionNonce::new),
         previous.allKeys().stream().collect(Collectors.toMap(SessionNonce::new, key -> previous.simpleValue(key, Instant::ofEpochMilli)))
      );
   }

   private SessionNoncesMapifier() {
   }
}
