package cn.iocoder.yudao.module.system.api.notify;

import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO;
import cn.iocoder.yudao.module.system.api.wechat.dto.CorpSendMessage;

import javax.validation.Valid;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 站内信发送 API 接口
 *
 * @author xrcoder
 */
public interface NotifyMessageSendApi {

    /**
     * 发送单条站内信给 Admin 用户
     *
     * @param reqDTO 发送请求
     * @return 发送消息 ID
     */
    Long sendSingleMessageToAdmin(@Valid NotifySendSingleToUserReqDTO reqDTO);

    /**
     * 发送单条站内信给 Member 用户
     *
     * @param reqDTO 发送请求
     * @return 发送消息 ID
     */
    Long sendSingleMessageToMember(@Valid NotifySendSingleToUserReqDTO reqDTO);


    /**
     * 发送单条站内信给 Admin 用户
     *
     * @param reqDTO 发送请求
     * @return 发送消息 ID
     */
    Long sendSingleMessageToAdminByDTO(@Valid NotifySendSingleToUserReqDTO reqDTO);

    void updateMessageStatus(String processInstanceId, String taskId, Long userId, Integer completedStatus);

    void updateSelfMessageStatus(String processInstanceId, String taskId, Long userId, Long assigneeUserId, Integer completedStatus, Integer approveMethod, Boolean startNodeFlag);

    Long sendSingleMessageToAdminByList(List<NotifySendSingleToUserReqDTO> copyNotifyList);


    Long sendMessageAndCorpMessage(@Valid NotifySendSingleToUserReqDTO reqDTO, CorpSendMessage corpSendMessage);

    Long sendCorpMessageList(List<CorpSendMessage> corpList, NotifySendSingleToUserReqDTO notifySendSingleToUserReqDTO);

    Long sendCorpCancelMessage(CorpSendMessage corpSendMessage);

    Integer updateMessageByCodeAndPkMessage(String templateCode, Long elderlyId);
}
