package com.keao.edu.common.service;


import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.keao.edu.common.entity.SysMessage;
import com.keao.edu.common.enums.MessageSendMode;
import com.keao.edu.common.enums.MessageTypeEnum;
import com.keao.edu.thirdparty.message.MessageSenderPlugin;

public interface SysMessageService extends BaseService<Long, SysMessage> {

	/**
	 * 修改消息对象
	 * @param message
	 * @return
	 */
	public int updateMessage(SysMessage message);

	/**
	 * 推送站内消息
	 * @param userIds
	 * @param messageType
	 * @return
	 */
	boolean batchSeoMessage(Set<Integer> userIds, MessageTypeEnum messageType, String memo, Object... args);

	/**
	 * 批量发送消息
	 * @param messageSender 消息发送者
	 * @param subject 消息主题
	 * @param content 消息内容
	 * @param receivers 消息接受者
	 * @param triggerTime 触发时间
	 * @param group 组
	 * @return
	 */
	public boolean batchSendMessage(MessageSenderPlugin senderPlugin, String subject, String content, Map<Integer, String> receivers, Date triggerTime,
                                    Integer readStatus, String memo, String group, String jpushType);

	/**
	 * 发送消息
	 * @param messageType 消息类型
	 * @param receivers 消息接收者（Key:用户编号  value:消息接收对象）
	 * @param triggerTime 触发时间
	 * @param readStatus 阅读状态（0-未读  1-已读）
	 * @param url 超链接地址
	 * @param args 参数
	 * @return
	 */
	public void batchSendMessage(MessageTypeEnum messageType, Map<Integer, String> receivers, Date triggerTime,
                                 Integer readStatus, String url, String jpushType, Object... args);

	/**
	 * 发送消息
	 * @param messageSender 消息发送者
	 * @param userId 用户编号
	 * @param title 消息标题
	 * @param content 消息内容
	 * @param receiver 消息接受者
	 * @param triggerTime 触发时间
	 * @param readStatus 阅读状态（0-未读  1-已读）
	 * @param url 超链接地址
	 * @param group 组
	 * @return
	 */
	public void sendMessage(MessageSenderPlugin senderPlugin, Integer userId, String title, String content, String receiver, Date triggerTime, Integer readStatus,
                            String url, String group, String jpushType);

	/**
	 * 发送验证码
	 * @param messageSender 消息发送者
	 * @param userId 用户编号
	 * @param messageType 消息类型
	 * @param receiver 消息接受者
	 * @return
	 */
	public boolean sendSecurityCode(Integer userId, MessageTypeEnum messageType, String receiver);

	/**
	 * 获取已经发送的验证码
	 * @param type
	 * @param mobileNOOrEmailAddr
	 * @return
	 */
	public String getSendedVerificationCode(MessageTypeEnum type, String mobileNOOrEmailAddr);

	/**
	 * 删除已有的key
	 * @param type
	 * @param mobileNOOrEmailAddr
	 */
	public void delSendedVerificationCode(MessageTypeEnum type, String mobileNOOrEmailAddr);

	/**
	 * 查询消息未读条数
	 * @param type
	 * @param userId
	 * @return
	 */
	public Map<String, Integer> queryCountOfUnread(MessageSendMode type, Integer userId);

	/**
	 *
	 * @param userId 用户id
	 * @param status 状态/1 已读,0未读
	 * @return
	 */
	public int updateStatus(Integer userId, int status);

	/**
	 * 修改单条消息状态
	 */
	public int updateOneStatus(Long id, int status);

	public List<SysMessage> queryUserInRecentMinList(String mobile, int recentMin, MessageSendMode type);

	/**
	 * 删除消息
	 * @param ids
	 */
    void batchDelMessage(String ids);
}
