package cn.axzo.workflow.core.listener;

import cn.axzo.workflow.core.common.context.OperationContext;
import cn.axzo.workflow.core.engine.event.BizSpecifyAssigneeEvent;
import org.flowable.engine.delegate.DelegateExecution;
import org.springframework.core.Ordered;

/**
 * 用户活动节点的事件, 供外部引入 jar 包方式使用的钩子
 * <p>
 * 与 BpmTaskEventListener 的区别: 一个 Activity 可以有多个 Task, Task 有多个实例; 而本接口是针对这个节点的, 就算该审批节点是多人审批, 只有一次该节点的生命周期事件
 * <p>
 * 微服版本使用, 统一在 Server module 中进行实现扩展, 不在该 module 中实现
 *
 * @author wangli
 * @since 2023/7/24 17:27
 */
public interface BpmnActivityEventListener extends OperationContext, Ordered {

    /**
     * 节点已启动
     *
     * @param execution
     */
    default void onStart(DelegateExecution execution) {}

    /**
     * 节点等待业务指定审批人
     */
    default void onWaitAssignee(BizSpecifyAssigneeEvent event) {}

    /**
     * 节点已完成
     *
     * @param event
     */
    default void onTake(DelegateExecution execution) {}

    /**
     * 节点已取消
     *
     * @param execution
     */
    default void onEnd(DelegateExecution execution) {}
}
