package com.rf.psychological.scale.service;

import com.rf.psychological.scale.dao.model.SubjectEntity;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Optional;

/**
 * @author zzf
 * @description:
 * @date 2021/5/17 9:44
 */
public interface SubjectService {
    /**
     * 获取量表和认知任务列表
     *
     * @return
     */
    List<SubjectEntity> findAll(int pageNum, int pageSize);

    /**
     * 检索，根据中文名或录入人
     *
     * @param pageNum
     * @param pageSize
     * @param searchName
     * @return
     */
    List<SubjectEntity> findByNameOrUploader(int pageNum, int pageSize, String searchName);

    /**
     * 根据名称模糊查询或上传人精确查询总条数
     *
     * @param searchName
     * @return
     */
    int allNumByNameOrUploader(String searchName);

    Optional<SubjectEntity> findById(String id);

    /**
     * 保存
     *
     * @param subjectEntity
     */
    void save(SubjectEntity subjectEntity);


    void saveBatch(List<SubjectEntity> subjectEntityList);


    /**
     * 查询
     *
     * @param type 0：量表  1：认知任务
     * @return
     */
    List<SubjectEntity> findAll(String type);

    /**
     * 热门量表
     *
     * @return
     */
    List<SubjectEntity> findHotScale();

    /**
     * 最新测试
     *
     * @return
     */
    List<SubjectEntity> findNewScale();


    /**
     * 总条数
     *
     * @return
     */
    int allNum();

    /**
     * 根据名称模糊查询列表
     *
     * @return
     */
    List<SubjectEntity> getSubjectListByName(int pageNum, int pageSize, String searchStr);


    /**
     * 根据名称模糊查询总条数
     *
     * @return
     */
    int allNumByName(String searchStr);

    /**
     * 根据flag查询
     *
     * @return
     */
    List<SubjectEntity> getSubjectByFlag(String flag);

    /**
     * 根据flag记录测试数
     *
     * @return
     */
    void addTestNum(String flag);


    /**
     * 根据量表中文名查询
     *
     * @return
     */
    SubjectEntity getSubjectByname(String name);

    /**
     *
     * @param name
     * @param like true:使用like判断 false使用等值判断
     * @return
     */
    List<SubjectEntity> getSubjectListByname(String name, Boolean like);

    /**
     * 修改量表测试结果效验状态
     *
     * @param flag
     * @return
     */
    void updateScaleStatus(String flag, String status);

    /**
     * 根据id修改量表
     *
     * @param
     * @return
     */
    void updateById(String id, String scoringPrinciple);

    /**
     * 某类别下模糊查询总条数
     *
     * @return
     */
    int allNumByNameCategory(String scaleName, String categoryEname);

    /**
     * 某类别下根据名称模糊查询列表
     *
     * @return
     */
    List<SubjectEntity> getSubjectListByNameCategory(int pageNum, int pageSize, String scaleName, String categoryEname);

    /**
     * 某类别下总条数
     *
     * @return
     */
    int allNumCategory(String categoryEname);


    /**
     * 某类别下所有信息列表
     *
     * @return
     */
    List<SubjectEntity> findAllCategory(int pageNum, int pageSize, String categoryEname);


    /**
     * 加上权限校验下的列表详情
     *
     * @param pageNum
     * @param pageSize
     * @param scaleName
     * @param institutionNo
     * @return
     */
    List<SubjectEntity> getSubjectListByAuth(int pageNum, int pageSize, String scaleName, String institutionNo);

    List<SubjectEntity> getSubjectListByAuthAndCategory(int pageNum, int pageSize, String scaleName, String categoryEname, String institutionNo);

    int allNumByAuth(String scaleName, String categoryEname, String institutionNo);


    /**
     * 查询用户的量表权限，含有类别
     *
     * @param uId
     * @param scaleName
     * @param cateEName
     * @return
     */
    Page<SubjectEntity> findUserAuthAndCateEName(String uId, String scaleName, String cateEName, int pageNum, int pageSize);

    Page<SubjectEntity> findInstitutionNoSubAuthList(String institutionNo, String searchKey, int pageNum, int pageSize);

    void update(SubjectEntity subjectEntity);

    SubjectEntity getSubjectEntityByFlag(String flag);

    //查询机构自定义量表列表
    List<SubjectEntity> institutionByTC(int pageNum, int pageSize, String institutionNo);

    int institutionByTCNum(String institutionNo);

    void deleteSubjectByFlag(String flag);

    List<SubjectEntity> findByFlags(List<String> flags);

    List<SubjectEntity> getSubjectListByAuthSeted(int pageNum, int pageSize, String scaleName, String institutionNo, String scaleType);

    int getSubjectListByAuthSeted(String scaleName, String institutionNo, String scaleType);

    List<SubjectEntity> getRelevantEvaluation(String flag);

    List<SubjectEntity> getTrendingSearches(int numberFifteen);

    Page<SubjectEntity> getsubjectListMultiCondition(String name, String scaleCate, String people, String currentLimit, int pageNum, int pageSize);
}
