package cn.iocoder.yudao.module.exam.service;

import cn.iocoder.yudao.module.exam.entity.ExamBatchItem;
import cn.iocoder.yudao.module.exam.vo.ExamBatchItemNewVO;
import cn.iocoder.yudao.module.exam.vo.ExamBatchItemVO;
import cn.iocoder.yudao.module.exam.vo.ExamBatchVO;
import cn.iocoder.yudao.module.exam.vo.ExamVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 考试批次明细表 Service  接口
 *
 * @author lzt
 */
public interface ExamBatchItemService extends IService<ExamBatchItem> {

    /**
     * 分页查询
     *
     * @param pageReqVO TODO
     * @param page      TODO
     * @author vinjor-M
     * @date 15:05 2025/1/14
     **/
    IPage<ExamBatchItemVO> queryListPage(ExamBatchVO pageReqVO, Page<ExamBatchItemVO> page);

    /**
     * 根据批次ID查所有子表记录
     *
     * @param batchId 批次ID
     * @return java.util.List<cn.iocoder.yudao.module.exam.vo.ExamBatchItemVO>
     * @author vinjor-M
     * @date 13:40 2025/1/21
     **/
    List<ExamBatchItemVO> selectListByBatchId(String batchId);

    /**
     * 录入学生考试成绩
     *
     * @author vinjor-M
     * @date 13:48 2025/1/21
     **/
    void updateObj(ExamBatchItemVO examBatchVO);


    /**
     * 根据学生id和教练ID查询考试记录
     *
     * @param userId  学生ID
     * @param coachId 教练ID，可能为空
     * @return java.util.List<cn.iocoder.yudao.module.exam.vo.ExamBatchItemVO>
     * @author vinjor-M
     * @date 16:38 2025/2/10
     **/
    List<ExamBatchItemVO> selectByUserIdAndCoachId(Long userId, Long coachId);

    /**
     * 根据学生id和教练ID查询考试记录
     *
     * @param userId  学生ID
     * @param coachId 教练ID，可能为空
     * @return java.util.List<cn.iocoder.yudao.module.exam.vo.ExamBatchItemVO>
     * @author vinjor-M
     * @date 16:38 2025/2/10
     **/
    List<ExamVO> selectExamByUserIdAndCoachId(Long userId, Long coachId);

    /**
     * 录入学生考试成绩
     *
     * @author vinjor-M
     * @date 13:48 2025/1/21
     **/
    void updateObjNew(ExamBatchItemNewVO examBatchVO);

    /**
     * 通过批次详情id集合查询
     *
     * @param examIds
     * @return
     */
    List<ExamBatchItemVO> listJoinBatchByIds(List<String> examIds);
}
