package com.ycwl.basic.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ycwl.basic.model.pc.videoreview.dto.AdminVideoReviewLogReqDTO;
import com.ycwl.basic.model.pc.videoreview.dto.AdminVideoReviewLogRespDTO;
import com.ycwl.basic.model.pc.videoreview.dto.VideoReviewListReqDTO;
import com.ycwl.basic.model.pc.videoreview.dto.VideoReviewRespDTO;
import com.ycwl.basic.model.pc.videoreview.dto.VideoReviewStatisticsRespDTO;
import com.ycwl.basic.model.pc.videoreview.entity.VideoReviewEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

/**
 * 视频评价Mapper接口
 */
@Mapper
public interface VideoReviewMapper extends BaseMapper<VideoReviewEntity> {

    /**
     * 分页查询评价列表(带关联查询)
     *
     * @param reqDTO 查询条件
     * @return 评价列表
     */
    List<VideoReviewRespDTO> selectReviewList(VideoReviewListReqDTO reqDTO);

    /**
     * 管理后台分页查询评价日志(带更详细的管理信息)
     *
     * @param reqDTO 查询条件
     * @return 评价日志列表
     */
    List<AdminVideoReviewLogRespDTO> selectAdminReviewLogList(AdminVideoReviewLogReqDTO reqDTO);

    /**
     * 统计总评价数
     *
     * @return 总数
     */
    Long countTotal();

    /**
     * 计算平均评分
     *
     * @return 平均评分
     */
    Double calculateAverageRating();

    /**
     * 统计评分分布
     *
     * @return key: 评分, value: 数量
     */
    List<Map<String, Object>> countRatingDistribution();

    /**
     * 统计最近N天的评价趋势
     *
     * @param days 天数
     * @return key: 日期, value: 数量
     */
    List<Map<String, Object>> countRecentTrend(@Param("days") int days);

    /**
     * 统计景区评价排行(前N名)
     *
     * @param limit 限制数量
     * @return 景区排行列表
     */
    List<VideoReviewStatisticsRespDTO.ScenicReviewRank> countScenicRank(@Param("limit") int limit);

    /**
     * 查询所有问题机位ID列表(用于后端统计问题机位)
     *
     * @return 问题机位ID列表
     */
    List<List<Long>> selectAllProblemDeviceIds();
}
