package com.yutou.bilibili.BiliBili.Services;

import com.yutou.bilibili.mybatis.Bili.mybatis.model.BilibiliLiveData;
import com.yutou.bilibili.mybatis.Bili.mybatis.model.BilibiliLiveInfo;
import com.yutou.bilibili.mybatis.Bili.mybatis.model.BilibiliUpInfo;
import org.apache.ibatis.annotations.Param;

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

public interface IBiliBiliLiveService {

    /**
     * 获取所有up信息
     * @return up列表
     */
    List<BilibiliUpInfo> getUpInfo();
    List<BilibiliUpInfo> getUpInfo(int uid,String power);
    /**
     * 根据RoomId查询UP信息
     * @param data roomId
     * @return UP信息
     */
     BilibiliUpInfo queryUp(BilibiliUpInfo data);
     BilibiliUpInfo queryUpToUrl(String url);

    /**
     * 根据RoomId查询UP信息
     * @param roomId roomId
     * @return UP信息
     */
     BilibiliUpInfo queryUpToRoomId(int roomId);
    /**
     * 获取所有直播数据
     * @return 直播数据列表
     */
     List<BilibiliLiveData> getLiveData();
    /**
     * 获取所有直播统计
     * @return 直播统计列表
     */
     List<BilibiliLiveInfo> getLiveInfo();
    /**
     * 添加up信息
     * @param upData up信息
     * @return 是否成功
     */
     boolean addUpInfo(BilibiliUpInfo upData);
    /**
     * 更新UP信息
     * @param upData up信息
     * @return 是否成功
     */
     boolean updateUpInfo(BilibiliUpInfo upData);
    /**
     * 删除指定up信息
     * @param upData roomId
     * @return 是否成功
     */
     boolean deleteUp(BilibiliUpInfo upData);
    /**
     * 新增直播数据
     * @param data 直播数据
     * @return 是否成功
     */
     boolean addLiveData(BilibiliLiveData data);
    /**
     * 添加直播统计
     * @param data 直播统计
     * @return 是否成功
     */
     boolean addLiveInfo(BilibiliLiveInfo data);

    /**
     * 查询指定时段直播数据
     * @param roomId roomId
     * @param startTime 开始时间，为空表示为当天00:00:00
     * @param endTime 结束时间，为空表示为当时
     * @param type 类型
     * @return 列表
     */
     List<BilibiliLiveData> queryLiveData(int roomId, Date startTime, Date endTime, String[] type);
    /**
     * 查询指定时段直播某个礼物总数
     * @param roomId roomId
     * @param giftId 礼物id,-1则为全部
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 数量
     */
     int queryGiftSize(int roomId, int giftId, Date startTime, Date endTime);
    /**
     * 返回指定时段各个礼物总数
     * @param roomId roomId
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return {giftName:size}
     */
     Map<String, Integer> queryGiftSize(int roomId, Date startTime, Date endTime);
    /**
     * 查询指定时段收益情况
     * @param roomId roomId
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 未扣除收成比例的金瓜子数量
     */
     int queryPriceSize(int roomId, Date startTime, Date endTime);
    /**
     * 根据礼物id查询礼物信息，该方法主要用于阿B接口未收录的礼物信息
     * @param giftId 礼物id
     * @return 直播信息
     */
     BilibiliLiveData queryGiftOfId(int giftId);
    /**
     * 查询指定时段去重送礼人数
     *
     * @param upData    up信息
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param type      礼物类型
     * @return 人数
     */
     int queryGiftUserToDistinct(BilibiliUpInfo upData, Date startTime, Date endTime, String[] type);
    /**
     * 查询时段内人气数量
     * @param upData up信息
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 人气
     */
     int queryPopularCount(BilibiliUpInfo upData,Date startTime, Date endTime);
    /**
     * 查询时段内进场人数
     * @param upData up信息
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 人数
     */
     int queryUserCount(BilibiliUpInfo upData,Date startTime, Date endTime);
    /**
     * 查询时段内礼物详情
     * @param upData up信息
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 人数
     */
      Map<String, Integer> queryUserGiftCount(BilibiliUpInfo upData,Date startTime,Date endTime);

      List<BilibiliLiveInfo> queryLiveInfo(BilibiliUpInfo upInfo,Date startTime,Date endTime);

    List<Map<String, BigDecimal>>queryTimeGroup(int roomId, Date startTime, Date endTime);

    List<Map<String, BigDecimal>>queryGiftTimeGroup(int roomId,  Date startTime, Date endTime);
}
