package org.dromara.business.service;

import jakarta.servlet.http.HttpServletResponse;
import org.dromara.business.domain.bo.CaseBaseInfoBo;
import org.dromara.business.domain.vo.CaseBaseInfoVo;
import org.dromara.business.domain.vo.CaseBeatifyNotice;
import org.dromara.business.domain.vo.CaseUserVo;
import org.dromara.business.domain.vo.UserCaseInfoVo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.SysUser;

import java.util.Collection;
import java.util.List;

/**
 * 病例基础信息Service接口
 *
 * @author wuzhigang
 * @date 2023-11-27
 */
public interface ICaseBaseInfoService {

    /**
     * 查询病例基础信息
     */
    CaseBaseInfoVo queryById(Long id);

    /**
     * 查询病例基础信息列表
     */
    TableDataInfo<CaseBaseInfoVo> queryPageList(CaseBaseInfoBo bo, PageQuery pageQuery);

    /**
     * 查询病例基础信息列表
     */
    List<CaseBaseInfoVo> queryList(CaseBaseInfoBo bo);

    /**
     * 新增病例基础信息
     */
    Boolean insertByBo(CaseBaseInfoBo bo);

    /**
     * 修改病例基础信息
     */
    Boolean updateByBo(CaseBaseInfoBo bo);

    /**
     * 校验并批量删除病例基础信息信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 修改病例状态
     */
    int updateCaseStatus(CaseBaseInfoBo bo);

    /**
     * 根据用户ID获取用户病例信息列表
     *
     * @param doctorUserId 医生ID
     * @param volunteerUserId 志愿者ID
     * @return
     */
    UserCaseInfoVo selectCaseListByUserId(Long doctorUserId,Long volunteerUserId);

    /**
     * 获取医生用户列表
     *
     * @return
     */
    List<CaseUserVo> doctorList();

    /**
     * 获取专家用户分配列表
     *
     * @return
     */
    List<CaseUserVo> expertList();

    /**
     * 获取专家用户下来列表
     *
     * @return
     */
    List<CaseUserVo> expertSelectList();

    /**
     * 获取志愿者用户列表
     *
     * @return
     */
    List<CaseUserVo> volunteerList();

    /**
     * 查询病例审核列表
     */
    TableDataInfo<CaseBaseInfoVo> queryCheckPageList(CaseBaseInfoBo bo, PageQuery pageQuery);

    /**
     * 获取病例数据中审核状态
     *
     * @return
     */
    List<String> selectCaseReviewStatus();

    /**
     * 查询病例点评列表
     */
    TableDataInfo<CaseBaseInfoVo> queryCommentList(CaseBaseInfoBo bo, PageQuery pageQuery);

    /**
     * 点评专家分配
     *
     * @param bo
     * @return
     */
    int expertAllocation(CaseBaseInfoBo bo);

    /**
     * 专家点评
     *
     * @param bo
     * @return
     */
    boolean comment(CaseBaseInfoBo bo);

    /**
     * 查询病例点评审核列表
     *
     * @param bo
     * @param pageQuery
     * @return
     */
    TableDataInfo<CaseBaseInfoVo> queryCommentAuditList(CaseBaseInfoBo bo, PageQuery pageQuery);

    /**
     * 专家点评审核
     *
     * @param bo
     * @return
     */
    int commentAudit(CaseBaseInfoBo bo);

    /**
     * 病例解析审核分页列表查询
     *
     * @param bo
     * @param pageQuery
     * @return
     */
    TableDataInfo<CaseBaseInfoVo> queryAnalysisList(CaseBaseInfoBo bo, PageQuery pageQuery);

    /**
     * 病例解析审核
     *
     * @param bo
     * @return
     */
    int analysisAudit(CaseBaseInfoBo bo);

    /**
     * 根据志愿者userIds,医生userId查询志愿者上传病例列表
     *
     * @param volunteerUserIds
     * @param userId
     * @return
     */
    List<CaseBaseInfoVo> selectCaseListByVolunteerUserIds(List<Long> volunteerUserIds,Long userId);

    /**
     * 根据医生userIds查询志愿者上传病例列表
     *
     * @param doctorUserIds
     * @param volunteerUserId
     * @return
     */
    List<CaseBaseInfoVo> selectCaseListByDoctorUserIds(List<Long> doctorUserIds,Long volunteerUserId);

    /**
     * 获取病例数据中点评审核状态
     *
     * @return
     */
    List<String> commentAuditStatus();

    /**
     * 获取病例数据中解析审核状态
     *
     * @return
     */
    List<String> caseAnalysisStatus();

    /**
     * 获取病例数据中点评状态
     *
     * @return
     */
    List<String> commentStatus();


    /**
     * 点评自动分配专家
     *
     * @return
     */
    SysUser commentDistributionExpert();


    /**
     * 下载病例美化文件状态记录
     *
     * @param bo
     * @return
     */
    int beautifyDownloadStatus(CaseBaseInfoBo bo);


    /**
     * 获取病例美化通知信息
     *
     * @param id
     * @return
     */
    CaseBeatifyNotice caseBeatifyNotice(Long id);
}
