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

/**
 * 引擎广播发送消息的事件， 业务一般无需实现，该事件由引擎的中继服务去处理待办相关动作的。
 * <p>
 * 注意：Order 的顺序，遵循值越小越优先。（取值范围：Integer. MIN_VALUE - Integer. MAX_VALUE）
 *
 * @author wangli
 * @since 2024/5/27 16:25
 */
public interface MessageNotificationEventHandler extends Ordered {

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

    /**
     * 站内信推送
     *
     * @param dto
     */
    default void pushNotice(MessagePushDTO dto) {
    }

    /**
     * 待办推送
     *
     * @param dto
     */
    default void pushPending(MessagePushDTO dto) {
    }

    /**
     * 完成待办
     *
     * @param dto
     */
    default void completePending(MessagePushDTO dto) {
    }

    /**
     * 审批失败，恢复待办
     *
     * @param dto
     */
    default void rollbackPending(MessagePushDTO dto) {
    }

    /**
     * 抄送流程
     *
     * @param dto
     */
    default void carbonCopy(MessagePushDTO dto) {
    }

    /**
     * 完成抄送
     *
     * @param dto
     */
    default void carbonCopyComplete(MessagePushDTO dto) {
    }

    /**
     * 短信推送
     *
     * @param dto
     */
    default void pushSms(MessagePushDTO dto) {
    }

    /**
     * IM 推送
     * @param dto
     */
    default void pushIm(MessagePushDTO dto) {}

}
