package com.rc.httpcore.client

import com.rc.httpcore.apk.AppInfo
import com.rc.httpcore.vo.CommonListResponse
import com.rc.httpcore.vo.CommonResponse
import com.rc.httpcore.vo.request.*
import com.rc.httpcore.vo.response.*
import io.reactivex.Observable

interface ExamClient {
//
//    /**
//     * 登录获取token
//     */
//    fun authOneLogin(): Observable<Boolean>


    fun getCheck(deviceNum: String,type:String,version:Double): Observable<AppInfo>
    /**
     * 查询APK版本
     *
     * @param id 设备唯一编码
     */
    fun apkVersion(id: String): Observable<ApkInfoResp>

    fun monitor(deviceNo: String): Observable<Boolean>

    /**
     * 上传APK更新状态
     *
     * @param state 0:升级失败; 1:升级成功; 2:升级中
     */
    fun onepcApkUpdate(id: String, state: String): Observable<Boolean>

    /**
     * 查询轮播图
     *
     * @param id 设备唯一编码
     */
    fun bannerImages(id: String): Observable<List<BannerImageBean>>

    /**
     * 人脸比对
     */
    fun faceCompare(param: FaceCompareReq): Observable<Boolean>

    fun compare(param: FaceCompareReq): Observable<Boolean>

    /**
     * 学习一体机 用户端登录
     *
     * @param param 刷学生卡数据 userName
     */
    fun learnLogin(param: LearnLoginReq): Observable<LearnLoginVo>

    fun cardNum(cardNum: String): Observable<LearnLoginVo>

    /**
     * 获取token
     *
     * @param param 刷学生卡数据 userName
     */
    fun loginToken(param: LearnLoginReq): Observable<LearnLoginVo>

    /**
     * 安全学习-学习分类
     */
    fun categoryTreeList(): Observable<List<CategoryTree>>

    /**
     * 安全学习-查询学习资源列表
     */
    fun examCourseList(param: CourseListReq): Observable<CommonListResponse<ExamCourseVo>>


    /**
     * 安全学习-获取学习资源详细信息
     */
    fun examCourseDetail(id: String): Observable<ExamCourseVo>

    /**
     * 安全学习-开始学习
     */
    fun examLearnStart(param: ExamLearnReq): Observable<Boolean>

    /**
     * 安全学习-开始学习
     */
    fun examLearnFinish(param: ExamLearnReq): Observable<LearnBonusBean>

    /**
     * 安全学习-个人学习记录
     */
    fun examLearnRecord(param: LearnRecordReq): Observable<CommonListResponse<LearnRecordVo>>

    /**
     * 查询题目类型下拉框
     */
    fun classifyQueryOption(): Observable<List<TopicClassifyVo>>

    /**
     * 查询模拟列表
     */
    fun onlineList(param: MockTestReq): Observable<CommonListResponse<MockTestVo>>

    /**
     * 开始-查询考试前后否需要人脸验证
     *
     * @param examId 非模拟考试模式下都传-1
     */
    fun examStartVerify(type: String, examId: String = "-1"): Observable<ExamVerify>

    /**
     * 开始考试-创建考卷
     *
     * @param examId 非模拟考试模式下都传-1
     */
    fun examStart(type: String, examId: String = "-1"): Observable<ExamTopic>

    /**
     * 考试 保存用户答案 一题一交
     */
    fun examFillAnswer(param: ExamAnswerReq): Observable<Boolean>

    /**
     * 交卷- 完成考试
     */
    fun examHandPaper(param: HandPaperReq): Observable<HandPaperBean>

    /**
     * 个人考试成绩列表查询
     */
    fun paperMyList(param: ExamScoreReq): Observable<CommonListResponse<ExamTopic>>

    /**
     * 个人考试成绩详情查询
     */
    fun paperDetail(id: String): Observable<ExamTopic>

    /**
     * 考试 查询问题和选项 - 一题一查
     */
    fun paperExamQuDetail(param: PaperQuReq): Observable<ExamTopic.ElPaperQu>

    /**
     * 查询我的证书列表
     */
    fun queryMyCert(pageNum: Int, pageSize: Int): Observable<CommonListResponse<CertVo>>

    /**
     * 模拟练习-开始练习
     */
    fun mockTestStart(ids: String): Observable<ExamTopic>

    /**
     * 练习 查询问题和选项 - 一题一查
     */
    fun paperMockQuDetail(param: PaperQuReq): Observable<ExamTopic.ElPaperQu>

    /**
     * 练习 保存用户答案 - 一题一交
     */
    fun mockAnswer(param: MockAnswerReq): Observable<Boolean>

    /**
     * 结束练习
     */
    fun handPractise(param: HandPractiseReq): Observable<HandPractiseBean>

    /**
     * 个人中心-用户信息
     */
    fun queryUserInfo(): Observable<UserInfo>

    /**
     * 个人中心-违规信息
     */
    fun queryViolationList(param: ViolationReq): Observable<List<ViolationBean>>

    /**
     * 是否有待处理的违规
     */
    fun existTodoViolation(): Observable<Boolean>

    /**
     * 开始考核-生成考核考卷
     * @param id 章节ID
     */
    fun classTestStart(id: String): Observable<ExamTopic>

    /**
     * 结束考核
     * @param id 考核ID(试卷ID)
     */
    fun handAssess(id: String): Observable<HandPractiseBean>

    /**
     * 考核记录列表
     */
    fun classTestRecord(param: AssessRecordReq): Observable<CommonListResponse<AccessRecordBean>>

    /**
     * 考核详情
     * @param id 考核ID(试卷ID)
     */
    fun classTestDetail(id: String): Observable<ExamTopic>

    /**
     * 退出登录
     */
    fun loginOut(): Observable<Boolean>

}