package com.yfd.platform.system.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.system.domain.SysUser;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 系统用户
 * </p>
 *
 *
 * @since 2021-10-27
 */
public interface IUserService extends IService<SysUser> {

    //获取当前用户账号及名称
    String getUsername();

    //获取当前用户信息
    SysUser getUserInfo();
    /***********************************
     * 用途说明：获取当前用户账号与姓名
     * 返回值说明: 当前用户账号与姓名
     ************************************/
    Map<String, String> getNameInfo();
    //获取当前用户信息带权限
    ResponseResult getLoginUserInfo();

    /***********************************
     * 用途说明：新增用户
     * 参数说明
     *sysUser   新增用户对象
     * id       创建者id
     * roleId   角色id
     * 返回值说明: 提示字符串
     ************************************/
    Map addUser(SysUser sysUser, String roleids);

    /***********************************
     * 用途说明:查询系统用户
     * 参数说明
     *page     分页集合参数
     *orgid    所属组织
     *username 用户名称
     * mobile  手机号
     * status  状态
     * 返回值说明: 用户分页集合
     ************************************/
    List<Map> list(String total, String size, String orgid, String username,
                   String mobile, String status);

    /***********************************
     * 用途说明：根据ID查询用户详情
     * 参数说明
     *id        用户id
     * 返回值说明: 用户表对象
     ************************************/
    Map getOneById(String id);

    /***********************************
     * 用途说明：根据ID修改用户
     * 参数说明
     *sysUser   用户对象
     *roleids  角色id
     * 返回值说明: 是否更新成功
     ************************************/
    Map updateById(SysUser sysUser, String roleids);

    /***********************************
     * 用途说明：用户分配角色（多个）
     * 参数说明
     *roleid     角色id
     * userids   用户id数组
     * 返回值说明: 判断是否添加成功
     ************************************/
    boolean setUserRoles(String roleid, String userids);

    /***********************************
     * 用途说明：根据id删除用户
     * 参数说明
     *id         用户id
     * 返回值说明: 判断是否删除成功
     ************************************/
    boolean deleteById(String id);

    /***********************************
     * 用途说明：重置用户密码(管理员)
     * 参数说明
     *id        重置密码的 用户id
     * 返回值说明: 判断是否重置成功
     ************************************/
    boolean resetPassword(String id) throws Exception;

    /***********************************
     * 用途说明：设置账号状态(管理员)
     * 参数说明
     *id        用户id
     * status   设置状态
     * 返回值说明: 判断是否设置成功
     ************************************/
    boolean setStatus(String id, String status);

    /***********************************
     * 用途说明：上传用户头像
     * 参数说明
     * id           用户id
     * img          账号头像
     * 返回值说明:  判断是否上传
     ***********************************/
    boolean uploadAvatar(String id, MultipartFile img);

    /***********************************
     * 用途说明：新增系统角色用户对照表 对用户分配角色(单个)
     * 参数说明
     * id       生成的id
     * userid   用户id
     * roleid   角色id
     * 返回值说明:
     ************************************/
    boolean addUserRoles(String roleid, String userid);

    //Page<SysUser> queryUsers(String orgid, String username, Page<SysUser> page);
    Page<Map<String,Object>> queryUsers(String orgid, String username,String status, Page<SysUser> page);

    /***********************************
     * 用途说明：根据ID批量删除用户
     * 参数说明
     *ids        用户id集合
     * 返回值说明: 判断是否删除成功
     ************************************/
    boolean deleteUserByIds(String ids);

    /***********************************
     * 用途说明：根据用户表id查询角色表所有角色id
     * 参数说明
     * userId     用户id
     * 返回值说明:
     ************************************/
    List<String> getRoleId(String userId);

    /***********************************
     * 用途说明：根据用户账号获取用户信息
     * 参数说明
     * username     用户账号
     * 返回值说明:  用户信息
     ************************************/
    SysUser getUserInfo(String username);

    /***********************************
     * 用途说明：检测用户输入密码是否与保存密码一致
     * 参数说明
     * username     用户账号
     * password     用户密码
     * 返回值说明:  true
     ************************************/
    boolean checkPassword(String username, String password);

    /***********************************
     * 用途说明：更新用户密码
     * 参数说明
     * username     用户账号
     * password     用户密码
     * 返回值说明:  密码加密后更新到数据库
     ************************************/
    boolean updatePassword(String username, String password) ;

    List<Map> getLevel(String id);

    /***********************************
     * 用途说明: 获取审计管理员用户
     * 参数说明
     * 返回值说明: java.util.List<com.yfd.platform.system.domain.SysUser>
     ***********************************/
    List<SysUser> getAuditManagement();

    boolean sendVerCodeToPhone(String phone, String sessionContext, String templateId, String[] templateParamSet);

}
