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

import com.airlock.iam.flow.api.application.configuration.step.FlowStepConfig;
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.domain.model.step.FlowStepConditionChecker;

public interface StateMachineController {
   StepResult preProcessFirstStep(FlowStep var1, FlowStepConfig var2, FlowStepConditionChecker var3);

   StepResult preProcessStep(FlowStep var1, FlowStepConfig var2, FlowStepConditionChecker var3);

   StepResult postProcessStepResult(StepResult var1, FlowStep var2, FlowStepConfig var3);

   void handleStepSucceeded(FlowStep var1, StepResult var2);

   void handleStepSkipped(FlowStep var1, StepResult var2);

   void handleStepStay(FlowStep var1, StepResult var2);

   void handleStepFailedRetry(FlowStep var1, StepResult var2);

   void handleStepFailed(FlowStep var1, StepResult var2);

   void handleSubflowSelected(FlowStep var1, StepResult var2, FlowStep var3);

   void handleGoto(FlowStep var1, StepResult var2, FlowStep var3);

   void handleFailGoto(FlowStep var1, StepResult var2, FlowStep var3);

   void handleFlowSucceeded(FlowStep var1, StepResult var2);

   void handleFlowFailed(FlowStep var1, StepResult var2);
}
