package cn.axzo.workflow.core.listener;

import cn.axzo.workflow.core.common.context.OperationContext;
import org.flowable.common.engine.api.delegate.event.FlowableEngineEntityEvent;
import org.flowable.engine.delegate.event.FlowableCancelledEvent;
import org.flowable.engine.delegate.event.FlowableProcessStartedEvent;
import org.springframework.core.Ordered;

/**
 * 流程实例相关事件, 供外部引入 jar 包方式使用的钩子
 * <p>
 * 微服版本使用, 统一在 Server module 中进行实现扩展, 不在该 module 中实现
 */
public interface BpmnProcessEventListener extends OperationContext, Ordered {

    /**
     * 流程实例创建成功后回调
     *
     * @param event
     */
    default void onCreated(FlowableEngineEntityEvent event) {}

    /**
     * 流程实例开始运行后回调
     *
     * @param event
     */
    default void onStarted(FlowableProcessStartedEvent event) {}

    /**
     * 流程实例被撤回后回调
     *
     * @param event
     */
    default void onCancelled(FlowableCancelledEvent event) {}

    /**
     * 流程实例被驳回后回调
     *
     * @param event
     */
    default void onRejected(FlowableCancelledEvent event) {}

    /**
     * 流程实例被中止后回调
     *
     * @param event
     */
    default void onAborted(FlowableCancelledEvent event) {}

    /**
     * 流程实例运行完成后回调
     * <p>
     * 注意: 完成只是说明流程实例已停止运行
     *
     * @param event
     */
    default void onCompleted(FlowableEngineEntityEvent event) {}

}
