package com.fs.live.mapper;


import com.fs.live.domain.LiveMsg;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 直播讨论Mapper接口
 *
 * @author fs
 * @date 2025-01-17
 */
public interface LiveMsgMapper
{
    /**
     * 查询直播讨论
     *
     * @param msgId 直播讨论主键
     * @return 直播讨论
     */
    public LiveMsg selectLiveMsgByMsgId(Long msgId);

    /**
     * 查询企业直播讨论
     * @param msgId             消息ID
     * @param companyId         企业ID
     * @param companyUserId     企业用户ID
     * @return LiveMsg
     */
    LiveMsg selectLiveMsgByMsgIdAndCompanyIdAndCompanyUserId(@Param("msgId") Long msgId, @Param("companyId") Long companyId, @Param("companyUserId") Long companyUserId);

    /**
     * 查询直播讨论列表
     *
     * @param liveMsg 直播讨论
     * @return 直播讨论集合
     */
    public List<LiveMsg> selectLiveMsgList(LiveMsg liveMsg);

    /**
     * 新增直播讨论
     *
     * @param liveMsg 直播讨论
     * @return 结果
     */
    public int insertLiveMsg(LiveMsg liveMsg);

    /**
     * 修改直播讨论
     *
     * @param liveMsg 直播讨论
     * @return 结果
     */
    public int updateLiveMsg(LiveMsg liveMsg);

    /**
     * 删除直播讨论
     *
     * @param msgId 直播讨论主键
     * @return 结果
     */
    public int deleteLiveMsgByMsgId(Long msgId);

    /**
     * 批量删除直播讨论
     *
     * @param msgIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteLiveMsgByMsgIds(Long[] msgIds);

    @Select("select * from live_msg where live_id = #{liveId} order by create_time desc limit 30")
    List<LiveMsg> listRecentMsg(@Param("liveId")Long liveId);

    @Select("SELECT " +
            "    SUM(CASE WHEN live_flag = 1 THEN 1 ELSE 0 END) AS liveCommentNum, " +
            "    SUM(CASE WHEN replay_flag = 1 THEN 1 ELSE 0 END) AS replayCommentNum " +
            "FROM live_msg WHERE live_id = #{liveId}")
    Map<String, BigDecimal> selectDashboardCount(@Param("liveId") Long liveId);

    List<LiveMsg> selectLiveMsgSingleList(LiveMsg liveMsg);

    /**
     * 查询直播评论用于导出
     *
     * @param liveId 直播ID
     * @return 评论列表
     */
    List<com.fs.live.vo.LiveMsgExportVO> selectLiveMsgForExport(@Param("liveId") Long liveId);
}
