package com.softwarebr.nunu.service.user;

import com.brframework.commondb.core.EntityService;
import com.brframework.commonweb.json.PageParam;
import com.softwarebr.nunu.entity.user.Message;
import com.softwarebr.nunu.json.api.user.MessageResult;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Map;

/**
 * @date 2020/03/17 15:40:01
 * @author lilin
 */

public interface MessageService extends EntityService<Message, Long, Object> {
    /**
     * 根据用户id查询消息列表
     * @param memberId
     * @return
     */
    List<Message> findByMemberId(Long memberId, Long id);

    /**
     * 发送消息
     * @param memberId 用户ID
     * @param type 类型{@link Message}
     * @param title 消息标题
     * @param description 说明
     * @param ext
     */
    void sendMessage(Long memberId, Integer type, String title, String description, Map<String, String> ext);

    /**
     *  查询分页数据
     * @param page
     * @return
     */
    Page<Message> findPage(PageParam page, Long memberId);

    /**
     * 消息数据转JSONString
     * @param memberId 用户ID
     * @param type 消息类型
     * @param title 消息标题
     * @param description 消息内容
     * @param targetType 跳转类型
     * @param targetId 对象ID
     * @return
     */
    String sendMessageJSON(Long memberId, Integer type, String title, String description, Integer targetType, String targetId);

    /**
     * 未读消息条数
     * 这个方法会进行未读消息条数更新
     * @param memberId
     * @return
     */
    int unreadCount(Long memberId);

    /**
     * 读消息
     * @param memberId
     * @param messageId
     */
    void readMessage(Long memberId, Long messageId);

    /**
     * 处理未读消息
     * @param list
     * @param memberId
     */
    void handleUnreadMessage(List<MessageResult> list, Long memberId);

    /**
     * 根据userId查询其最后一条记录
     * @param memberId
     * @return
     */
    Message findTopByUserId(Long memberId);


}