package click.kamil.examples.statemachine.inheritanceextrafunctionsstate3;

import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer;
import org.springframework.statemachine.config.configurers.ExternalTransitionConfigurer;
import org.springframework.statemachine.config.configurers.StateConfigurer;

class F1StateMachineConfiguration extends AbstractFStateMachineConfiguration {
    @Override
    protected void addAdditionalStates(StateConfigurer<States, Events> states) {
        states.state(States.STATE_EXTRA_1);
        states.state(States.STATE_EXTRA_2);
        states.state(States.STATE_EXTRA_3);
    }

    @Override
    protected void addAdditionalCancellationTransitions(StateMachineTransitionConfigurer<States, Events> transitions) {
        addAllCancellationTransitionsForSource(transitions, States.STATE_EXTRA_1);
        addAllCancellationTransitionsForSource(transitions, States.STATE_EXTRA_2);
    }

    @Override
    protected void addAdditionalTransitions(ExternalTransitionConfigurer<States, Events> transitions) throws Exception {
        transitions
                .and()
                .withExternal().event(Events.EVENTX)
                .source(States.STATE2)
                .target(States.STATE_EXTRA_1)
                .and()
                .withChoice()
                .source(States.STATE2)
                .first(States.STATE1, guardEventHeaderEquals("header1", "foo"))
                .last(States.STATE_EXTRA_1)
                .and()
                .withExternal()
                .source(States.STATE_EXTRA_1)
                .event(Events.EVENTY)
                .target(States.STATE_EXTRA_3);
    }

}
