package com.sundot.airport.exam.common.service;

import com.github.pagehelper.PageInfo;
import com.sundot.airport.exam.common.model.params.ExamRecPageParam;
import com.sundot.airport.exam.common.model.result.ExamCountResult;
import com.sundot.airport.exam.domain.ExamRec;

import java.util.List;
import java.util.Optional;

/**
 * <b>功能名：ExamRecService</b><br>
 * <b>说明：</b> 考试记录表 <br>
 * <b>著作权：</b> Copyright (C) 2021 HUIFANEDU  CORPORATION<br>
 * <b>修改履历：</b><br>
 *
 * @author 2021-06-25 Mokou
 */
public interface ExamRecService extends BaseService<ExamRec> {
    /**
     * <b>方法名: </b> getCountExamRec <br>
     * <b>说明: </b> 查询用户指定考试的已考试次数 <br>
     *
     * @param uid        String 用户ID
     * @param pcIds      List<String> 课程(考试)ID
     * @param clientType String 客户端类型
     * @return List<ExamCountResult>
     * <b>修改履历: </b>
     * @author 2021/6/25 Mokou
     */
    List<ExamCountResult> getCountExamRec(String uid, List<String> pcIds, String clientType);

    /**
     * <b>方法名: </b> pageList <br>
     * <b>说明: </b> 考试记录表分页查询 <br>
     *
     * @param pageParam ExamRecPageParam 分页参数
     * @return PageInfo<ExamRec>
     * <b>修改履历: </b>
     * @author 2021/7/5 Mokou
     */
    PageInfo<ExamRec> pageList(ExamRecPageParam pageParam);

    /**
     * <b>方法名: </b> getByIdAndUserId <br>
     * <b>说明: </b> 通过记录ID 用户ID 查询测试记录 <br>
     *
     * @param serviceId String 测试记录ID
     * @param uid       String 用户ID
     * @return Optional<ExamRec>
     * <b>修改履历: </b>
     * @author 2021/7/5 Mokou
     */
    Optional<ExamRec> getByIdAndUserId(String serviceId, String uid);

    /**
     * <b>方法名: </b> byPcIdUsrIdEnableCount <br>
     * <b>说明: </b> 统计某个课程某个用户的考试记录次数 <br>
     *
     * @param pcId         java.lang.String 课程业务id
     * @param usrId        java.lang.String 用户业务id
     * @param enableStatus java.lang.Boolean 记录是否有效
     * @return int<br>
     * <b>修改履历: </b>
     * @author 2021/7/2 liangxiao
     */
    long byPcIdUsrIdEnableCount(String pcId, String usrId, Boolean enableStatus);

    /**
     * <b>方法名: </b> countExamNumEnable <br>
     * <b>说明: </b> 查询用户某考试的参加次数 <br>
     *
     * @param uid  String 用户ID
     * @param exId String 考试ID
     * @return int
     * <b>修改履历: </b>
     * @author 2021/7/9 Mokou
     */
    long countExamNumEnable(String uid, String exId);

    /**
     * <b>方法名: </b> getLatestByExIds <br>
     * <b>说明: </b> 通过考试ID列表 查询用户每个考试最近的考试记录 <br>
     *
     * @param exIds List<String>
     * @param uid   String
     * @return List<ExamRec><br>
     * <b>修改履历: </b>
     * @author 2021/7/30 Mokou
     */
    List<ExamRec> getLatestByExIds(List<String> exIds, String uid);
}
