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.ProcessTaskDTO;
import org.springframework.core.Ordered;

/**
 * 审批任务相关事件
 * <p>
 * 一个节点（Activity）可以包含 0个或多个任务（Task），它们两者是包含关系
 * <p>
 * 注意：Order 的顺序，遵循值越小越优先。（取值范围：Integer. MIN_VALUE - Integer. MAX_VALUE）
 *
 * @author wangli
 * @since 2024/5/27 16:21
 */
public interface ProcessTaskEventHandler extends Ordered {

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

    /**
     * 用户任务已指派审核人
     */
    default void onAssigned(ProcessTaskDTO dto) {
    }

    /**
     * 用户任务已创建,未指派审核人
     */
    default void onCreated(ProcessTaskDTO dto) {
    }

    /**
     * 用户任务已通过
     * <p>
     * 仅审核通过一个用户任务时触发, 如果任务是驳回了, 则直接走实例撤回事件
     */
    default void onCompleted(ProcessTaskDTO dto) {
    }

    /**
     * 用户任务已删除
     * <p>
     * 删除不代表驳回或拒绝,因为通过也会走该事件
     */
    default void onDeleted(ProcessTaskDTO dto) {
    }

    /**
     * 用户任务已转交
     * @param dto
     */
    default void onTransfer(ProcessTaskDTO dto) {}
}
