package com.ym.mec.biz.service;

import java.util.Date;

import com.ym.mec.biz.dal.entity.SysMessage;
import com.ym.mec.biz.dal.entity.SysMessageConfig.MessageType;
import com.ym.mec.biz.dal.enums.SendStatusEnum;
import com.ym.mec.biz.dal.enums.MessageSendMode;
import com.ym.mec.common.service.BaseService;
import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;

public interface SysMessageService extends BaseService<Long, SysMessage> {

	/**
	 * 添加消息
	 * @param userId 用户编号
	 * @param subject 消息主题
	 * @param content 消息内容
	 * @param receivers 接收人，多个人用逗号分开
	 * @param triggerTime 触发时间
	 * @param mode 消息的发送模式
	 * @param status 消息的当前状态
	 * @param errorMsg 错误消息
	 * @param readStatus 阅读状态
	 * @param memo 备注
	 * @return
	 */
	public int addMessage(Integer userId, String subject, String content, String receivers, Date triggerTime, MessageSendMode mode, SendStatusEnum status,
			String errorMsg, Integer readStatus, String memo);

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

	/**
	 * 批量发送消息
	 * @param messageSender 消息发送者
	 * @param mode 消息模式
	 * @param subject 消息主题
	 * @param content 消息内容
	 * @param receivers 消息接受者
	 * @param triggerTime 触发时间
	 * @return
	 */
	public boolean batchSendMessage(MessageSender messageSender, MessageSendMode mode, String subject, String content, String receivers, Date triggerTime,
			Integer readStatus, String memo);

	/**
	 * 发送消息
	 * @param messageSender 消息发送者
	 * @param userId 用户编号
	 * @param mode 消息模式
	 * @param messageType 消息类型
	 * @param receiver 消息接受者
	 * @param triggerTime 触发时间
	 * @param readStatus 阅读状态（0-未读  1-已读）
	 * @param url 超链接地址
	 * @param args 参数
	 * @return
	 */
	public void sendMessage(MessageSender messageSender, Integer userId, MessageSendMode mode, MessageType messageType, String receiver, Date triggerTime,
			Integer readStatus, String url, Object... args);

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

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

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

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

	/**
	 * 查询消息未读条数
	 * @param userId
	 * @return
	 */
	public int queryCountOfUnread(Integer userId);

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

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

}