package com.rf.psychological.user.service;

import com.alibaba.fastjson.JSONObject;
import com.rf.psychological.scale.dao.model.SubjectEntity;
import com.rf.psychological.user.dao.model.UserEntity;
import com.rf.psychological.enums.UserRole;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * @author zsy
 * @description:登录认证
 * @date 2021/6/17 15:55
 */
public interface UserService {

    /**
     * 根据手机号查询
     *
     * @return
     */
    UserEntity findPhone(String phone);


    /**
     * 根据用户id
     *
     * @return
     */
    UserEntity getOne(String userId);


    UserEntity findOne(String userId);

    /**
     * 保存
     *
     * @param userEntity
     */
    UserEntity save(UserEntity userEntity);

    /**
     * 根据手机号修改密码
     *
     * @return
     */
    void updatePassword(String phone, String password, String institutionNo, String roleType);


    /**
     * 2021-09-26 新版本改造添加通过机构编码获取用户列表接口，供管理员审核
     *
     * @param institutionNo
     * @return
     */
    List<UserEntity> getUserListByInstitutionNo(int pageNum, int pageSize, String searchKey, String institutionNo, String status, String groupId);

    int allNum(String searchKey, String institutionNo, String status, String groupId);

    /**
     * 2021-09-26 新版本改造添加用户审核接口
     *
     * @param userId
     * @param status
     * @return
     */
    void updateUserStatus(String status, String userId);


    /**
     * @param pageNum
     * @param pageSize
     * @param institutionNo
     * @param searchKey
     * @return
     */
    List<UserEntity> getTestListByInstitutionNo(int pageNum, int pageSize, String institutionNo, String searchKey, String groupId);

    int allNumByInstitutionNo(String institutionNo, String searchKey, String groupId);


    /**
     * 查询该机构下的账号
     * @param institutionNo 机构编号
     * @param phone 账号
     * @param roleType 账号
     * @return
     */
    UserEntity findPhoneAndInstitutionNoAndRoleType(String phone, String institutionNo, String roleType);

    /**
     * 通过手机号与机构号删除用户
     *
     */
    //void deleteByPhoneAndInstitutionNo(String phone, String institutionNo);


    void delete(UserEntity userEntity);

    void updateUserGroup(String gId, String id);

    List<UserEntity> findUsersInGroup(String gId);

    /**
     * 查询用户拥有的数据权限
     *
     * @param uId
     * @return
     */
    Page<SubjectEntity> findUserAuth(String uId, int pageNum, int pageSize, String scaleName);

    /**
     * @param pageNum
     * @param pageSize
     * @param institutionNo
     * @param gId
     * @return
     */
    Page<UserEntity> findUserNoGroup(int pageNum, int pageSize, String institutionNo, String gId, String searchKey);

    /**
     * 校验用户是否已注册
     *
     * @param phone
     * @return
     */
    String checkUser(String phone);

    Page<UserEntity> findUserNoTestPlan(String institutionNo, String testPlanId, String searchKey, int beginNum, int pageSize);

    /**
     * 修改用户信息，根据登录账号修改用户的信息
     *
     * @param phone
     * @param institutionNo
     * @return 修改后的用户信息
     */
    UserEntity updateUserInfo(String phone, String institutionNo, String newModelPhone, String petName, String gender, String birthday, String profession);

    /**
     * 获取用户手机号
     *
     * @param phone
     * @param institutionNo
     * @return
     */
    UserEntity findModelPhone(String phone, String institutionNo);

    List<UserEntity> getuserListByMPhone(String id);


    /**
     * 查询分组编号==0 的用户所在的组织编号,用于定时任务
     *
     * @param groupId
     * @return
     */
    List<String> findInstitutionNosByGroupId(String groupId);

    /**
     * 更新用户分组信息
     *
     * @param institutionNo 机构编号
     * @param oldGroupId    原分组编号
     * @param newGroupId    新分组编号
     */
    void updateUserGroup(String institutionNo, String oldGroupId, String newGroupId);

    /**
     * 查询用户分页
     * @param jsonObject
     * @return
     */
    Page<UserEntity> findUsersInGroup(JSONObject jsonObject);

    /**
     * userIds -->List<UserEntity>
     * @param userIdList
     * @return
     */
    List<UserEntity> getUserByIds(List<String> userIdList);


    /**
     * 根据登录账号或机构名称字段检索用户
     * @param pageNum 页码
     * @param pageSize 数量
     * @param searchKey 检索字段
     * @return
     */
    Page<UserEntity> findUserByPhoneOrInstitutionName(int pageNum,int pageSize,String searchKey);


    /**
     * 获取该机构下人员
     * @param pageNum 页码
     * @param pageSize 数量
     * @param institutionNo 机构编号
     * @param searchKey 查询值
     * @param role 用户角色
     * @param like 是否模糊查询
     * @return
     */
    Page<UserEntity> findUserByPhoneOrNameInInstitutionNo(int pageNum, int pageSize, String institutionNo, String searchKey, UserRole role,boolean like);
    /**
     * 获取该机构下人员 不分页
     * @param institutionNo 机构编号
     * @param searchKey 查询值
     * @param role 用户角色
     * @param like 是否模糊查询
     * @return
     */
    List<UserEntity> findUserByPhoneOrNameInInstitutionNo( String institutionNo, String searchKey, UserRole role,boolean like);

    /**
     * 调整用户状态
     * @param phone 账号
     * @param userStatus 状态值
     * @param institutionNo 机构编号
     */
    void updateUserStatusByPhone(String phone, String userStatus, String institutionNo);

    //UserEntity findPhoneAndInstitutionNo(String phone, String institutionNo);

    UserEntity findUserById(String id);


    /**
     * 根据手机号和机构编号查询用户
     * @param modelPhone 手机号
     * @param institutionNo 机构编号
     * @return
     */
    UserEntity findByModelPhoneAndeInstitution(String modelPhone,String institutionNo,String type);

    //查询机构下待审核人员
    List<UserEntity> findByStatus(String institutionNo, String Status);
}
