package com.yonge.cooleshow.auth.dal.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
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.enums.UserLockFlag;
import com.yonge.cooleshow.auth.api.vo.UserSetVo;
import com.yonge.toolset.mybatis.dal.BaseDAO;
import com.yonge.cooleshow.common.entity.ImUserModel;

public interface SysUserDao extends BaseDAO<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(@Param("phone") String phone, @Param("client") String client);

    /**
     * 修改密码
     *
     * @param mobile
     * @param password
     */
    void updatePassword(@Param("mobile") String mobile, @Param("password") String password);

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

    /**
     * 根据状态查询
     *
     * @param status
     * @return
     */
    List<SysUser> queryByStatus(UserLockFlag status);

    /**
     * 获取随机盐不为null的一条数据
     *
     * @param userType
     * @return
     */
    SysUser findUserBySalt(String userType);

    /**
     * 获取教师分部编号
     *
     * @param userId
     * @return
     */
    Integer getTeacherOrganId(Long userId);

    /**
     * 刷新用户token
     *
     * @param userId
     * @param imToken
     */
    void refreshImToken(@Param("userId") Long userId, @Param("imToken") String imToken);

    /**
     * 创建teacher表
     *
     * @param userId
     */
    void saveTeacher(@Param("userId") Long userId);

    /**
     * 保存student
     *
     * @param userId
     */
    void saveStudent(@Param("userId") Long userId);


    /***
     * 修改用户实名信息
     * @author liweifan
     * @param: teacherApplyDetailDto
     * @updateTime 2022/3/18 15:57
     * @return: java.lang.Integer
     */
    Integer updateUserCard(@Param("param") RealnameAuthReq param);

    /***
     * 查询老师设置详情
     * @author liweifan
     * @param: id
     * @updateTime 2022/3/22 10:24
     * @return: com.yonge.cooleshow.biz.dal.vo.TeacherVo
     */
    UserSetVo getSetDetail(@Param("id") Long id);

    /***
     * 修改老师设置信息
     * @author liweifan
     * @param: setReq
     * @param: id
     * @updateTime 2022/3/22 11:06
     */
    void updatetSetDetail(@Param("param") UserSetReq setReq, @Param("id") Long id);

    /***
     * 创建用户账户
     * @author liweifan
     * @param: id
     * @updateTime 2022/4/14 17:07
     */
    void createUserAccount(@Param("userId") Long id);

    List<SysUser> queryEmployeeList(SysUserQueryInfo queryInfo);
}