package com.yida.data.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yida.data.common.core.common.ResultBean;
import com.yida.data.common.core.entity.QueryRequest;
import com.yida.data.common.core.entity.system.SystemUser;
import com.yida.data.common.core.exception.FebsException;
import com.yida.data.system.dto.SchoolAdminAccountSaveDTO;
import com.yida.data.system.dto.SchoolAdminAccountSelectPageDTO;
import com.yida.data.system.vo.SchoolAdminAccountSelectPageVO;

import java.util.List;

/**
 * @author MrBird
 */
public interface IUserService extends IService<SystemUser> {

    /**
     * 通过用户名查找用户
     *
     * @param username 用户名
     * @return 用户
     */
    SystemUser findByName(String username);

    /**
     * 通过手机号查找用户
     *
     * @param mobile 手机号
     * @return 用户
     */
    SystemUser findByMobile(String mobile);

    /**
     * 查找用户详细信息
     *
     * @param request request
     * @param user    用户对象，用于传递查询条件
     * @return IPage
     */
    IPage<SystemUser> findUserDetailList(SystemUser user, QueryRequest request);

    /**
     * 通过用户名查找用户详细信息
     *
     * @param username 用户名
     * @return 用户信息
     */
    SystemUser findUserDetail(String username);

    void lockUser(Long id);

    void resetPwd(Long id);


    /**
     * 更新用户登录时间
     *
     * @param username username
     */
    void updateLoginTime(String username);

    /**
     * 新增用户
     *
     * @param user user
     */
    SystemUser createUser(SystemUser user);

    /**
     * 修改用户
     *
     * @param user user
     */
    void updateUser(SystemUser user);

    void updateUserWithName(SystemUser user);

    /**
     * 删除用户
     *
     * @param userIds 用户 id数组
     */
    void deleteUsers(String[] userIds);

    /**
     * 更新个人信息
     *
     * @param user 个人信息
     * @throws FebsException 异常
     */
    void updateProfile(SystemUser user) throws FebsException;

    /**
     * 更新用户头像
     *
     * @param avatar 用户头像
     */
    void updateAvatar(String avatar);

    /**
     * 更新用户密码
     *
     * @param password 新密码
     */
    void updatePassword(String password);

    void updatePassword(String password, String newPassword, String repeatPassword, String username);

    void validatePassword(String password, String username);

    /**
     * 重置密码
     *
     * @param usernames 用户集合
     */
    void resetPassword(String[] usernames);

    /**
     * 订阅易达app
     */
    void subscribeYidaApp(String userId, Long schoolId, Integer type);

    /**
     * 保存学校负责人账号
     *
     * @param schoolAdminAccountSaveDTO 保存学校负责人账号请求类
     * @return com.yida.data.common.core.common.ResultBean<java.lang.String>
     * @author ZYJ
     * @date 2021/9/28 11:08
     */
    ResultBean<String> saveSchoolAdminAccount(SchoolAdminAccountSaveDTO schoolAdminAccountSaveDTO);

    /**
     * 代理商查询学校管理员账号列表数据
     *
     * @param schoolAdminAccountSelectPageDTO 代理商查询学校管理员账号列表数据请求类
     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.yida.data.system.vo.SchoolAdminAccountSelectPageVO>
     * @author ZYJ
     * @date 2022/1/12 16:02
     */
    IPage<SchoolAdminAccountSelectPageVO> listSchoolAdminAccountPage(SchoolAdminAccountSelectPageDTO schoolAdminAccountSelectPageDTO);

    /**
     * 更新用户的角色
     */
    void updateUserRoleByRoleName(Long userId, List<String> roleNames);

    /**
     * 获取企业微信用户授权后创建职工用户信息
     */
    void createStaff(Long schoolId, String code);
}