package com.yonge.cooleshow.biz.dal.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yonge.cooleshow.biz.dal.vo.ActivityEvaluationRecordVo;
import com.yonge.cooleshow.biz.dal.vo.ActivityRankingVo;
import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationRecordSearch;
import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluationRecord;
import com.yonge.cooleshow.common.enums.ActivityResourceEnum;

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

/**
 * 评测活动参与记录表 服务类
 * @author liweifan
 * @date 2022-08-04
 */
public interface ActivityEvaluationRecordService extends IService<ActivityEvaluationRecord>  {

	/**
     * 查询详情
     * @author liweifan
 	 * @date 2022-08-04
     */
	ActivityEvaluationRecordVo detail(Long id);

    /**
     * 分页查询
     * @author liweifan
 	 * @date 2022-08-04
     */
    IPage<ActivityEvaluationRecordVo> selectPage(IPage<ActivityEvaluationRecordVo> page, ActivityEvaluationRecordSearch query);

	/**
	 * 获取参与 的活动项目id集合
	 *
	 * @param userId 用户id
	 * @param activityId 活动id
	 * @return
	 */
    List<Long> getJoinEvaluationIdList(Long activityId, Long userId);

	/**
	 * 保存活动评测分数
	 *
	 * @param evaluationId 活动项目id
	 * @param userId 用户id
	 * @param score 分数
	 */
    void saveRecord(Long evaluationId, Long userId, BigDecimal score);



	/**
	 * 添加活动参与记录
	 *
	 * @param activityId 活动id
	 * @param userId 用户id
	 * @param resourceId 资源id
	 * @param resourceType 资源类型
	 */
    void saveActivityRecord(Long activityId, Long userId, Long resourceId, ActivityResourceEnum resourceType);

	/**
	 * 查询指定活动指定曲目的排行榜
	 * @param activityPlanId 指定活动
	 * @param activityEvaluationId 指定曲目
	 * @param limit 获奖人数
	 * @return
	 */
	List<ActivityRankingVo> queryRankingList(Long activityPlanId, Long activityEvaluationId, int limit);
	
	/**
	 * 查询指定用户的排名
	 * @param activityPlanId
	 * @param activityEvaluationId
	 * @param userId
	 * @return
	 */
	ActivityRankingVo queryUserRanking(Long activityPlanId, Long activityEvaluationId, Long userId);

	/**
	 * 用户活动最高排名信息
	 * @param activityId 活动ID
	 * @param userIds 用户ID
	 * @return List<ActivityEvaluationRecord>
	 */
	List<ActivityEvaluationRecord> queryActivityUserHighestRankingInfo(Long activityId, List<Long> userIds);


}