package com.yonge.cooleshow.auth.service;

import java.util.List;

import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
import com.yonge.cooleshow.auth.api.dto.SysUserInfo;
import com.yonge.cooleshow.auth.api.dto.SysUserQueryInfo;
import com.yonge.cooleshow.auth.api.dto.UserSetReq;
import com.yonge.cooleshow.auth.api.entity.SysUser;
import com.yonge.cooleshow.auth.api.vo.UserSetVo;
import com.yonge.cooleshow.common.entity.ImUserModel;
import com.yonge.toolset.mybatis.service.BaseService;

public interface SysUserService extends BaseService<Long, SysUser> {

    /**
     * 根据用户名查询对象
     *
     * @param username
     * @return
     */
    SysUser queryByUsername(String username);

    /**
     * 根据手机号查询对象
     *
     * @param phone
     * @return
     */
    SysUser queryByPhone(String phone);

    /**
     * 根据手机号查询对象
     *
     * @param phone
     * @return
     */
    SysUser queryLockByPhone(String phone);

    /**
     * 根据手机号查询对象
     *
     * @param phone
     * @return
     */
    SysUser queryByPhoneAndClient(String phone, String client);

    /**
     * 根据用户名获取系统用户详细信息
     *
     * @param username
     * @return
     */
    SysUserInfo queryUserInfoByUsername(String username);

    /**
     * 根据手机号获取系统用户详细信息
     *
     * @param phone
     * @return
     */
    SysUserInfo queryUserInfoByPhone(String phone);

    /**
     * 根据手机号获取系统用户详细信息
     *
     * @param phone
     * @return
     */
    SysUserInfo queryUserInfoByPhoneAndClient(String phone, String client);

    /**
     * 删除指定用户
     *
     * @param id
     * @return
     */
    boolean deleteById(Long id);

    /**
     * 根据用户手机号修改密码
     *
     * @param mobile
     * @param password
     */
    void updatePassword(String mobile, String password);

    /**
     * 新增用户
     *
     * @param sysUser
     * @return
     */
    Long add(SysUser sysUser);

    /**
     * 获取用户基本信息
     *
     * @param userId
     * @return
     */
    ImUserModel getBasic(Long userId);

    /**
     * 修改用户基本信息
     *
     * @param sysUser
     */
    void updateBaseInfo(SysUser sysUser);

    /**
     * 获取用户基本信息
     *
     * @param userId
     * @return
     */
    SysUser queryUserInfo(Long userId);

    /**
     * 用户注册
     *
     * @param phone
     * @param clientId
     * @return
     */
    SysUserInfo registerUser(String phone, String clientId);

    /**
     * 刷新token
     *
     * @param sysUser
     */
    void refreshImToken(SysUser sysUser);

    /**
     * 保存student数据
     *
     * @param userId
     */
    void saveStudent(SysUser sysUser);

    /**
     * 保存teacher数据
     *
     * @param userId
     */
    void saveTeacher(SysUser sysUser);

    /***
     * 更新用户实名信息
     * @author liweifan
     * @param: realNameAuthDto
     * @param: idcardInfoExtractor
     * @updateTime 2022/3/22 15:11
     * @return: java.lang.Integer
     */
    void updateUserCard(RealnameAuthReq realNameAuthDto);

    /***
     * 用户设置页面详情
     * @author liweifan
     * @param: id
     * @updateTime 2022/3/22 10:22
     * @return: com.yonge.cooleshow.biz.dal.vo.TeacherVo
     */
    UserSetVo getSetDetail(Long id);
    /***
     * 用户设置
     * @author liweifan
     * @param: setReq
     * @param: id
     * @updateTime 2022/3/22 11:04
     */
    void submitSetDetail(UserSetReq setReq, Long id);

    /**
     *  商城同步管理用户
     *
     * @param queryInfo
     * @return
     */
    List<SysUser> queryEmployeeList(SysUserQueryInfo queryInfo);
}