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

import com.airlock.iam.flow.domain.model.session.FlowSessionManager;
import com.airlock.iam.flow.domain.model.session.InternalFlowSession;
import com.airlock.iam.flow.domain.model.session.MultiFlowSession;
import com.airlock.iam.flow.types.api.domain.model.session.MultiFlowType;
import java.util.Optional;

public interface MultiFlowManager extends FlowSessionManager {
   void expectMultiFlowType(MultiFlowType var1) throws UnexpectedMultiFlowTypeException;

   Optional<MultiFlowType> getCurrentMultiFlowType();

   InternalFlowSession prepareFirstFlowSession(MultiFlowSession var1);

   boolean shouldContinueWithNextFlow();

   InternalFlowSession prepareNextFlowSession();

   void startFlowSessionIfNotYetStarted();

   void finishSuccessfulFlow();

   boolean destroyCurrentMultiFlow();

   void destroyAndClearTerminatedFlowSession();

   void handleFlowSucceeded();

   void handleFlowFailed();
}
