package com.ruoyi.hezhi.service;

import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.hezhi.domain.TbExamRegistration;
import com.ruoyi.hezhi.domain.dto.ExamRegistrationDTO;
import com.ruoyi.hezhi.domain.dto.PostAddressDTO;
import com.ruoyi.hezhi.domain.vo.TbExamRegistrationVO;
import com.ruoyi.hezhi.domain.vo.TopicImportTemplateVO;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.Valid;
import java.util.List;
import java.util.Map;

/**
 * 考试报名Service接口
 *
 * @author ruoyi
 * @date 2024-11-05
 */
public interface ITbExamRegistrationService
{
    /**
     * 查询考试报名
     *
     * @param examRegistrationId 考试报名主键
     * @return 考试报名
     */
    public TbExamRegistration selectTbExamRegistrationByExamRegistrationId(Long examRegistrationId);
    /**
     * 查询发货信息
     *
     * @param examRegistrationId 考试报名主键
     * @return 考试报名
     */
    public TbExamRegistration selectTbExamRegistrationByExamRegistrationIdFahuo(Long examRegistrationId);

    /**
     * 查询考试报名列表
     *
     * @param tbExamRegistration 考试报名
     * @return 考试报名集合
     */
    public List<TbExamRegistration> selectTbExamRegistrationList(TbExamRegistration tbExamRegistration);

    /**
     * 新增考试报名
     *
     * @param tbExamRegistration 考试报名
     * @return 结果
     */
    public int insertTbExamRegistration(TbExamRegistration tbExamRegistration);

    /**
     * 修改考试报名
     *
     * @param tbExamRegistration 考试报名
     * @return 结果
     */
    public int updateTbExamRegistration(TbExamRegistration tbExamRegistration);

    /**
     * 批量删除考试报名
     *
     * @param examRegistrationIds 需要删除的考试报名主键集合
     * @return 结果
     */
    public int deleteTbExamRegistrationByExamRegistrationIds(Long[] examRegistrationIds);

    /**
     * 删除考试报名信息
     *
     * @param examRegistrationId 考试报名主键
     * @return 结果
     */
    public int deleteTbExamRegistrationByExamRegistrationId(Long examRegistrationId);

    /**
     * 证书发货
     * @param tbExamRegistration 参数
     * @return 结果
     */
    public int certificateSend(TbExamRegistration tbExamRegistration);

    /**
     * 考试报名
     *
     * @param examRegistrationDTO
     * @return ok
     */
    public AjaxResult examRegistration(ExamRegistrationDTO examRegistrationDTO);

    /**
     * 查询用户考试报名
     *
     * @param memberUserId 用户ID
     * @param examId 考试ID
     * @return 考试报名
     */
    public TbExamRegistration selectTbExamRegistrationByUserIdExamId(Long memberUserId, Long examId);

    /**
     * 我的考试列表
     *
     * @param params 参数
     * @return 结果
     */
    public List<Map<String,Object>> getMemberExamList(Map<String,Object> params);

    /**
     * 我的考试详情
     *
     * @param params 参数
     * @return 结果
     */
    public Map<String,Object> getMemberExamInfo(Map<String,Object> params);

    /**
     * 查询考试报名详情
     *
     * @param params 参数
     * @return 结果
     */
    public Map<String,Object> getExamRegistrationInfo(Map<String,Object> params);

    /**
     * 学习计划-我的课件列表
     *
     * @param params 参数
     * @return 结果
     */
    public List<Map<String,Object>> getMemberCoursewareList(Map<String,Object> params);

    /**
     * 我的报名表、准考证、证书
     *
     * @param params 参数
     * @return 结果
     */
    public Map<String,Object> getMemberCertificateMore(Map<String,Object> params);

    // /**
    //  * 查看快递信息
    //  *
    //  * @param params 参数
    //  * @return 结果
    //  */
    // public Map<String,Object> getExpressInfo(Map<String,Object> params);

    /**
     * 填写证书收货信息
     *
     * @param postAddressDTO
     * @return ok
     */
    public AjaxResult submitCertificateGoodsInfo(PostAddressDTO postAddressDTO);

    /**
     * 报名考试即将开始弹窗列表
     *
     * @param params 参数
     * @return 结果
     */
    public Map<String, Object> getStartNowPopupList(Map<String,Object> params);

    /**
     * 获取考试报名表
     * @param type 1-准考证，4-证书，10-报名表，11-成绩单
     * @param memberUserId 用户ID
     * @param examRegistrationId 考试报名ID
     * @return 结果
     */
    public JSONObject getReportFormView(Long type, Long memberUserId, Long examRegistrationId);

    /**
     * 导入考试题目
     * @param list 文件
     * @return 结果
     */
    String importData(@Valid List<TbExamRegistrationVO> list)throws Exception;

    AjaxResult havaOrderToPay(Long memberUserId);
}
