package com.fs.live.mapper;


import com.fs.live.domain.LiveData;
import com.fs.live.vo.LiveDashBoardDataVo;
import com.fs.live.vo.LiveDataListVo;
import com.fs.live.vo.LiveDataStatisticsVo;
import com.fs.live.vo.RecentLiveDataVo;
import com.fs.live.vo.TrendDataVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

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

/**
 * 直播数据Mapper接口
 *
 * @author fs
 * @date 2025-03-05
 */
@Repository
public interface LiveDataMapper {
    /**
     * 查询直播数据
     *
     * @param liveId 直播数据主键
     * @return 直播数据
     */
    LiveData selectLiveDataByLiveId(Long liveId);

    /**
     * 查询直播数据列表
     *
     * @param liveData 直播数据
     * @return 直播数据集合
     */
    List<LiveData> selectLiveDataList(LiveData liveData);

    /**
     * 新增直播数据
     *
     * @param liveData 直播数据
     * @return 结果
     */
    int insertLiveData(LiveData liveData);

    /**
     * 修改直播数据
     *
     * @param liveData 直播数据
     * @return 结果
     */
    int updateLiveData(LiveData liveData);

    /**
     * 删除直播数据
     *
     * @param liveId 直播数据主键
     * @return 结果
     */
    int deleteLiveDataByLiveId(Long liveId);

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

    /**
     * 查询所有正在直播的id
     * @return
     */
    List<Long> getAllLiveIds();

    /**
     * 查询近期直播数据
     * @return
     */
    List<RecentLiveDataVo> getRecentLive();

    /**
     * 查询直播数据top10
     * @param rankType
     * @return
     */
    List<RecentLiveDataVo> getLiveTop(@Param("rankType") String rankType);

    /**
     * 查询所选时间周期的直播数据
     * @param startDate
     * @param endDate
     * @return
     */
    TrendDataVO getCurrentData(@Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 查询折线图展示的直播数据
     * @param chartStartDate
     * @param chartEndDate
     * @param format
     * @return
     */
    List<Map<String, Object>> getChartData(@Param("chartStartDate") String chartStartDate, @Param("chartEndDate") String chartEndDate, @Param("format") String format,@Param("category") String category);

    /**
     * 查询所选时间上一个周期的直播数据
     * @param prevStartDate
     * @param prevEndDate
     * @return
     */
    TrendDataVO getPreviousData(@Param("prevStartDate") String prevStartDate, @Param("prevEndDate") String prevEndDate);

    List<LiveData> getAllLiveDatas();


    void updateBatchLiveData(@Param("liveDatas") List<LiveData> liveDatas);

    List<RecentLiveDataVo> getCompanyRecentLive(@Param("companyId") Long companyId);

    List<RecentLiveDataVo> getCompanyLiveTop(@Param("rankType") String rankType,@Param("companyId") Long companyId);

    TrendDataVO getCompanyCurrentData(@Param("startDate") String start,@Param("endDate") String end,@Param("companyId") Long companyId);

    TrendDataVO getCompanyPreviousData(@Param("prevStartDate") String start,@Param("prevEndDate") String end,@Param("companyId") Long companyId);

    List<Map<String, Object>> getCompanyChartData(@Param("chartStartDate") String chartStartDate,@Param("chartEndDate") String chartEndDate, @Param("format") String format,@Param("category") String category,@Param("companyId") Long companyId);

    @Select("SELECT " +
            "    ld.total_views AS liveViewNum, " +
            "    ld.replay_view_num AS replayViewNum, " +
            "    ld.likes AS liveLikeNum, " +
            "    ld.replay_like_num AS replayLikeNum " +
            "FROM " +
            "    live_data ld " +
            "where ld.live_id=#{liveId}")
    Map<String, Integer> selectDashboardCount(@Param("liveId") Long liveId);

    /**
     * 查询直播间统计数据
     * @param liveIds 直播间ID列表
     * @return 统计数据
     */
    LiveDataStatisticsVo selectLiveDataStatistics(@Param("liveIds") List<Long> liveIds);

    /**
     * 查询直播间列表数据
     * @param liveIds 直播间ID列表
     * @return 列表数据
     */
    List<LiveDataListVo> selectLiveDataListByLiveIds(@Param("liveIds") List<Long> liveIds);
}
