package com.sdtool.common.api;

import com.sdtool.common.entity.site.ERPTokenUser;
import com.sweetfish.service.Service;
import com.sweetfish.source.PageFlipper;
import com.sweetfish.util.AutoLoad;
import org.rex.RMap;

import java.util.Date;

/**
 * Created by jlutt on 2018-11-23.
 * 站内信服务
 *
 * @author jlutt
 */
@AutoLoad(false)
public interface SysMessageService extends Service {

    /**
     * 用户登录时同步系统的未读群发消息
     * 点对点的消息直接读取源数据即可
     *
     * @param userId 用户id
     */
    void syncSysGroupMessage(long userId, long supplierCode);

    /**
     * 系统给所有用户发送群发站内信
     *
     * @param title        信件标题
     * @param content      信件内容
     * @param expireDate   过期日期
     * @param currentUser  发送人，可为空
     * @param supplierCode 分表
     * @return 发送成功
     */
    int sendSysGroupMessage(String title, String content,
                            Date expireDate,
                            ERPTokenUser currentUser, long supplierCode);

    /**
     * 发送P2P站内信
     *
     * @param messageKind  消息类型
     * @param title        信件标题
     * @param content      信件内容
     * @param currentUser  发送人
     * @param supplierCode 分表
     * @param userIds      接受用户id数组
     * @return 1成功
     */
    int sendP2PMessage(int messageKind, String title, String content,
                       ERPTokenUser currentUser, long supplierCode, String... userIds);

    /**
     * 获取某个用户未读站内信的数量
     *
     * @param userId 用户id
     * @return 未读站内信数量
     */
    int queryUnReadMessageCount(long userId, long supplierCode);

    /**
     * 标记站内信为已读
     *
     * @param userId      用户id
     * @param messageIds  站内信ids
     * @param messageType 站内信类型 0表示系统群发消息
     */
    void readMessage(long userId, String messageIds, int messageType, long supplierCode);

    /**
     * 管理系统群发站内信--获取列表
     *
     * @param searchData  查询条件
     * @param currentUser 当前用户
     * @param pageFlipper 分页
     * @return 站内信列表
     */
    @SuppressWarnings("rawtypes")
    RMap manageSysMessageList(RMap searchData, ERPTokenUser currentUser, PageFlipper pageFlipper, long supplierCode);

    /**
     * 管理当前登录人员发送的点对点消息--获取列表
     *
     * @param searchData  查询条件
     * @param currentUser 当前用户
     * @param pageFlipper 分页
     * @return 站内信列表
     */
    @SuppressWarnings("rawtypes")
    RMap manageP2PMessageList(RMap searchData, ERPTokenUser currentUser, PageFlipper pageFlipper, long supplierCode);

    /**
     * 用户获取个人能读取的站内信列表
     *
     * @param currentUser 当前用户
     * @param messageType 站内信类型 0表示系统群发消息
     * @param pageFlipper 分页参数
     * @return 站内信列表
     */
    @SuppressWarnings("rawtypes")
    RMap manageRecvMessageList(int messageType, ERPTokenUser currentUser, PageFlipper pageFlipper, long supplierCode);
}
