package com.airlock.iam.flow.shared.domain.service;

import com.airlock.iam.flow.domain.model.session.InternalFlowSession;
import com.airlock.iam.flow.shared.api.domain.model.session.UserSession;
import com.airlock.iam.flow.shared.api.domain.model.session.UserSessionScopedFlowAttribute;

public final class SessionAttributesHelper {
   public static void takeOverAttributesFromUserSessionToFlowSession(UserSession userSession, InternalFlowSession flowSession) {
      userSession.userSessionAttributes().forEach(flowSession.flowAttributes()::putOrMergeAttribute);
   }

   public static void takeOverAttributesFromFlowSessionToUserSession(InternalFlowSession flowSession, UserSession userSession) {
      flowSession.flowAttributes()
         .values()
         .filter(UserSessionScopedFlowAttribute.class::isInstance)
         .map(UserSessionScopedFlowAttribute.class::cast)
         .forEach(userSession::addUserSessionAttribute);
   }

   private SessionAttributesHelper() {
   }
}
