package com.airlock.iam.flow.shared.domain.model.session;

import com.airlock.iam.common.api.domain.model.user.UserIdentity;
import com.airlock.iam.flow.api.domain.model.tag.Tag;
import com.airlock.iam.flow.domain.model.session.FlowSessionStatus;
import com.airlock.iam.flow.domain.model.session.InternalFlowSession;
import com.airlock.iam.flow.domain.model.session.MultiFlowSession;
import com.airlock.iam.flow.shared.api.domain.model.session.UserSession;
import java.util.Optional;
import java.util.Set;

public interface MultiFlowCapableUserSession extends UserSession {
   void setUserId(UserIdentity var1);

   Optional<InternalFlowSession> getCurrentFlowSession();

   default Optional<InternalFlowSession> getCurrentUnterminatedFlowSession() {
      return this.getCurrentFlowSession().filter(fs -> fs.getStatus().isBefore(FlowSessionStatus.TERMINATED));
   }

   void setCurrentFlowSession(InternalFlowSession var1);

   void clearCurrentFlowSession();

   Optional<MultiFlowSession> getMultiFlowSession();

   void setMultiFlowSession(MultiFlowSession var1);

   void addTags(Set<Tag> var1);

   boolean destroyCurrentMultiFlow();
}
