package cn.axzo.workflow.starter.handler;

import cn.axzo.framework.rocketmq.Event;
import cn.axzo.framework.rocketmq.EventConsumer;
import cn.axzo.workflow.common.model.response.mq.ProcessActivityDTO;
import org.springframework.core.Ordered;

/**
 * 流程节点相关事件
 * <p>
 * 节点代表“流程配置”中的一个“审批节点”或“业务节点”，流程配置请按照以下路径去查看
 * <pre>
 *  OMS -> 审批流程 -> 审批配置台 -> 流程配置
 * </pre>
 * <p>
 * 注意：Order 的顺序，遵循值越小越优先。（取值范围：Integer. MIN_VALUE - Integer. MAX_VALUE）
 *
 * @author wangli
 * @since 2024/5/27 16:25
 */
public interface ProcessActivityEventHandler extends Ordered {

    /**
     * 针对当前接口的实现进行过滤, 为 true 时，往下执行下面的方法
     *
     * @param dto
     * @param event
     * @param context
     * @return
     */
    default boolean accept(ProcessActivityDTO dto, Event event, EventConsumer.Context context) {
        return true;
    }

    /**
     * 节点已启动
     *
     * @param dto 入参
     */
    default void onStart(ProcessActivityDTO dto) {
    }

    /**
     * 节点等待业务指定审批人
     *
     * @param dto 入参
     */
    default void onWaitAssignee(ProcessActivityDTO dto) {
    }

    /**
     * 业务节点回调
     *
     * @param dto
     */
    default void onCallback(ProcessActivityDTO dto) {
    }

    /**
     * 节点已完成
     *
     * @param dto 入参
     */
    default void onTake(ProcessActivityDTO dto) {
    }

    /**
     * 节点已取消
     *
     * @param dto 入参
     */
    default void onEnd(ProcessActivityDTO dto) {
    }
}
