package com.airlock.iam.flow.api.application.configuration.selection;

import com.airlock.iam.flow.api.application.configuration.sequence.FlowStepSequence;
import com.airlock.iam.flow.api.application.configuration.step.FlowStepConfig;
import com.airlock.iam.flow.api.domain.model.selection.Option;
import com.airlock.iam.plugin.framework.application.service.builder.plugin.PluginPropertyBuilderInitializer;
import java.util.List;

public interface CommonSelectionOptionConfig {
   String OPTION_NAME_PROPERTY = "name";
   String STEPS_PROPERTY = "steps";
   String CONDITION_PROPERTY = "condition";

   String getName();

   List<? extends FlowStepConfig> getSteps();

   FlowConditionConfig getCondition();

   default Option getOption() {
      return Option.of(this.getName());
   }

   default FlowStepSequence getFlowStepSequence() {
      return ((FlowStepSequence.FlowStepSequenceBuilder)PluginPropertyBuilderInitializer.pluginBuilder(FlowStepSequence.FlowStepSequenceBuilder.class))
         .steps(this.getSteps())
         .build();
   }
}
