package com.ruoyi.message.frequency.interactionmessagerecord.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.enums.message.InteractionMessageEnums;
import com.ruoyi.controller.req.MessageReadOrDeleteReq;
import com.ruoyi.message.frequency.interactionmessagerecord.entity.InteractionMessageRecord;
import com.ruoyi.response.ResponseData;
import com.ruoyi.vo.PageBasic;
import com.ruoyi.vo.UserVo;

import java.util.List;

/**
 * 互动消息记录Service接口
 *
 * @author liwenlong
 * @date 2023-10-17
 */
public interface InteractionMessageRecordService extends IService<InteractionMessageRecord>
{
    /**
     * 查询互动消息记录
     *
     * @param id 互动消息记录主键
     * @return 互动消息记录
     */
    public InteractionMessageRecord selectInteractionMessageRecordById(Long id);

    /**
     * 查询互动消息记录列表
     *
     * @param interactionMessageRecord 互动消息记录
     * @return 互动消息记录集合
     */
    public List<InteractionMessageRecord> selectInteractionMessageRecordList(InteractionMessageRecord interactionMessageRecord);

    /**
     * 新增互动消息记录
     *
     * @param interactionMessageRecord 互动消息记录
     * @return 结果
     */
    public int insertInteractionMessageRecord(InteractionMessageRecord interactionMessageRecord);

    /**
     * 修改互动消息记录
     *
     * @param interactionMessageRecord 互动消息记录
     * @return 结果
     */
    public int updateInteractionMessageRecord(InteractionMessageRecord interactionMessageRecord);

    /**
     * 批量删除互动消息记录
     *
     * @param ids 需要删除的互动消息记录主键集合
     * @return 结果
     */
    public int deleteInteractionMessageRecordByIds(Long[] ids);

    /**
     * 删除互动消息记录信息
     *
     * @param id 互动消息记录主键
     * @return 结果
     */
    public int deleteInteractionMessageRecordById(Long id);

    /**
     * 互动消息列表
     * @param req
     * @param userVo
     * @return
     */
    ResponseData interactionMessagePage(PageBasic req, UserVo userVo);

    /**
     * 互动消息列表_已读，删除消息
     * @param req
     * @param userVo
     * @return
     */
    ResponseData interactionMessageReadOrDelete(MessageReadOrDeleteReq req, UserVo userVo);


    /**
     * 生成互动消息
     * @param userVo 当前用户
     * @param sendUserVo 目标用户
     * @param messageType 消息类型;1点赞消息 2评论消息 3关注消息
     * @param enums 具体类型看 InteractionMessageEnums 枚举
     * @param objectId
     *
     */
    void addInteractionMessage(UserVo userVo,UserVo sendUserVo, Integer messageType, Long objectId, Boolean isPush, InteractionMessageEnums enums);
}
