package com.rc.httpcore.client

import com.rc.httpcore.vo.CommonListResponse
import com.rc.httpcore.vo.Optional
import com.rc.httpcore.vo.request.*
import com.rc.httpcore.vo.response.*
import io.reactivex.Observable
import java.io.File

interface ChemicalClient {

    /**
     * 查询LOGO配置列表
     */
    fun queryLogoConfInfo(): Observable<ConfLogo>

    /**
     * 查询APK版本
     *
     * @param id 设备唯一编码
     */
    fun apkVersion(id: String): Observable<ApkInfoResp>

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

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

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

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

    /**
     * 查询实验室机柜列表
     */
    fun queryCabinetList(): Observable<List<CabinetBean>>

    /**
     * 查询化学品
     */
    fun queryChemicalList(param: ChemicalReq): Observable<CommonListResponse<ChemicalBean>>

    /**
     * 查询库存化学品
     */
    fun queryChemicalByStock(param: ChemicalReq): Observable<CommonListResponse<ChemicalBean>>

    /**
     * 双人验证 刷卡识别身份权限
     */
    fun userValidation(param: UserValidationVo): Observable<UserValidationVo>

    /**
     * 化学品入库
     */
    fun addStock(param: ChemicalBean): Observable<ChemicalBean>

    /**
     * 获取危化品安全技术说明书详细信息
     */
    fun hazardBookDetail(id: String): Observable<HazardBook>

    /**
     * 通过识别卡号或者二维码扫码查询已入库化学品
     */
    fun queryByTagCode(param: TagCodeReq): Observable<Optional<ChemicalBean>>

    /**
     * 领用化学品
     */
    fun addUserecord(param: UseReq): Observable<Boolean>

    /**
     * 归还时查询已领用化学品
     */
    fun queryByUserecord(param: TagCodeReq): Observable<ChemicalBean>

    /**
     * 归还化学品
     */
    fun updateUserecord(param: RevertReq): Observable<Boolean>

    /**
     * 化学品出库
     */
    fun outStock(param: OutputStockReq): Observable<Boolean>

    /**
     * RFID 标签更换
     */
    fun updateStock(param: UpdateRfidReq): Observable<Boolean>

    /**
     * 查询使用记录
     */
    fun queryRecordList(param: OperRecordReq): Observable<CommonListResponse<AioUserecordVo>>

    /**
     * 查询报警记录列表
     */
    fun queryAlarmRecordList(param: AlarmRecordReq): Observable<CommonListResponse<AioAlarmRecordVo>>

    /**
     * 查询报警记录详情
     */
    fun queryAlarmRecordDetail(id: String): Observable<AioAlarmRecordVo>

    /**
     * 检测类型报警记录手动处理
     */
    fun updateAlarmRecord(param: UpdateAlarmRecordReq): Observable<Boolean>

    /**
     * 判断当前登录人是否管理员
     */
    fun authValidation(): Observable<Boolean>

    /**
     * 终端登录查询实验室信息
     */
    fun querySubInfo(): Observable<SubInfoVo>

    /**
     * 人脸身份验证
     */
    fun faceAuth(param: SubInfoVo): Observable<UserValidationVo>

    /**
     * 查询机柜柜锁列表
     */
    fun queryCabinetLockList(param: CabinetLockVo): Observable<List<CabinetLockVo>>

    /**
     * 柜锁开锁
     */
    fun openLock(param: CabinetLockVo): Observable<LockRespBean>

    /**
     * 柜锁关锁
     */
    fun closeLock(param: CabinetLockVo): Observable<LockRespBean>

    /**
     * 上传文件
     */
    fun fileUpload(file: File): Observable<FileRespBean>

}