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

import com.airlock.iam.flow.api.domain.model.session.FlowSession;
import com.airlock.iam.flow.api.domain.model.step.FlowStep;
import com.airlock.iam.flow.api.domain.model.step.StepResult;
import com.airlock.iam.flow.api.domain.model.step.StepSession;
import com.airlock.iam.flow.application.configuration.flow.FlowConfigHash;
import com.airlock.iam.flow.domain.model.tag.FlowSessionTags;
import java.util.Deque;
import java.util.Optional;

public interface InternalFlowSession extends FlowSession {
   FlowSessionStatus getStatus();

   FlowSessionTags getFlowSessionTags();

   FlowConfigHash getFlowConfigHash();

   void start();

   Optional<StepResult> lastResult();

   void setCurrentStepSession(StepSession var1);

   void clearCurrentStepSession();

   void addResult(StepResult var1);

   void terminate();

   void destroy();

   Deque<StepResult> getStepResultHistory();

   int getResultHistorySize();

   void finalizeStepIfNecessary(FlowStep var1);

   void stepInitializationStarted();

   void checkUnterminated();

   void checkUndestroyed();

   boolean mustFinalizeCurrentStep();
}
