package com.ycwl.basic.service;

import com.github.pagehelper.PageInfo;
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.VideoPurchaseCheckReqDTO;
import com.ycwl.basic.model.pc.videoreview.dto.VideoPurchaseCheckRespDTO;
import com.ycwl.basic.model.pc.videoreview.dto.VideoReviewAddReqDTO;
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 java.io.IOException;
import java.io.OutputStream;

/**
 * 视频评价Service接口
 */
public interface VideoReviewService {

    /**
     * 新增视频评价
     *
     * @param reqDTO 评价信息
     * @return 评价ID
     */
    Long addReview(VideoReviewAddReqDTO reqDTO);

    /**
     * 分页查询评价列表
     *
     * @param reqDTO 查询条件
     * @return 分页结果
     */
    PageInfo<VideoReviewRespDTO> getReviewList(VideoReviewListReqDTO reqDTO);

    /**
     * 管理后台分页查询评价日志
     *
     * @param reqDTO 查询条件
     * @return 分页结果
     */
    PageInfo<AdminVideoReviewLogRespDTO> getAdminReviewLogList(AdminVideoReviewLogReqDTO reqDTO);

    /**
     * 获取评价统计数据
     *
     * @return 统计结果
     */
    VideoReviewStatisticsRespDTO getStatistics();

    /**
     * 导出评价数据到Excel
     *
     * @param reqDTO 查询条件
     * @param outputStream 输出流
     * @throws IOException IO异常
     */
    void exportReviews(VideoReviewListReqDTO reqDTO, OutputStream outputStream) throws IOException;

    /**
     * 检查视频是否已被购买
     * 购买条件：
     * 1. 直接购买视频（order_item中goods_type=0且goods_id=视频id）
     * 2. 购买整个模板（order的face_id与video关联的task的face_id相同，goods_type=-1，goods_id为video的templateId）
     *
     * @param reqDTO 查询条件
     * @return 购买状态及订单ID列表
     */
    VideoPurchaseCheckRespDTO checkVideoPurchase(VideoPurchaseCheckReqDTO reqDTO);
}
