package com.cmvr.test.flow.runtime.interceptor;

import com.cmvr.test.flow.runtime.message.TaskNodeExecuteMessage;
import com.cmvr.test.flow.runtime.message.TaskNodeExecuteResult;

import java.util.function.Function;

/**
 * 流程消息前置处理
 */
public interface FlowMsgPreInterceptor {

    /**
     * 拦截任务节点执行消息
     * @param message 原始执行消息
     * @param next 下一个处理函数
     * @return 返回最终执行结果
     */
    default TaskNodeExecuteResult intercept(TaskNodeExecuteMessage message,
                                    Function<TaskNodeExecuteMessage, TaskNodeExecuteResult> next) {
        return doIntercept(message, next);
    }
    
    /**
     * 执行拦截逻辑（子类可重写此方法实现自定义拦截）
     * @param message 执行消息
     * @param next 下一个处理函数
     * @return 执行结果
     */
    TaskNodeExecuteResult doIntercept(TaskNodeExecuteMessage message,
                                              Function<TaskNodeExecuteMessage, TaskNodeExecuteResult> next);
}
