package com.platform.modules.sys.service;

import com.baomidou.mybatisplus.service.IService;
import com.platform.common.utils.PageUtils;
import com.platform.common.utils.R;
import com.platform.modules.app.form.AppUserInfoForm;
import com.platform.modules.sys.entity.SysUserEntity;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * 系统用户
 */
public interface SysUserService extends IService<SysUserEntity> {

	PageUtils queryPage(Map<String, Object> params);

	SysUserEntity selectBaseById(Long userId);

	/**
	 * 查询用户的所有权限
	 * 
	 * @param userId
	 *            用户ID
	 */
	List<String> queryAllPerms(Long userId);

	/**
	 * 查询用户的所有菜单ID
	 */
	List<Long> queryAllMenuId(Long userId);

	/**
	 * 根据用户名，查询系统用户
	 */
	SysUserEntity queryByUserName(String username);

	/**
	 * 保存用户
	 */
	void save(SysUserEntity user);
	/**
	 * 保存用户
	 */
	void save(SysUserEntity user, MultipartFile materialFile) throws IOException;

	/**
	 * 修改用户
	 */
	void update(SysUserEntity user);
	/**
	 * 修改用户
	 */
	void update(SysUserEntity user, MultipartFile materialFile);

	/**
	 * 修改用户登录信息
	 */
	void updateLastLogin(SysUserEntity user);

	/**
	 * 删除用户
	 */
	void deleteBatch(Long[] userIds);

	/**
	 * 修改密码
	 * 
	 * @param userId
	 *            用户ID
	 * @param password
	 *            原密码
	 * @param newPassword
	 *            新密码
	 */
	boolean updatePassword(Long userId, String password, String newPassword);

	List<SysUserEntity> selectByRoleId(Integer roleId);

	/**
	 * 根据用户名，查询系统用户
	 */
	SysUserEntity queryByMobile(String mobile);

	/**
	 * 修改用户信息：姓名、电话、邮箱
	 * 
	 * @param userInfoForm
	 *            用户信息
	 */
	R updateUserInfo(AppUserInfoForm userInfoForm, Long userId);

	/**
	 * 仅修改用户头像
	 * 
	 * @param userEntity
	 *            用户
	 * @param multipartFile
	 *            头像文件
	 */
	String updateUserImg(SysUserEntity userEntity, MultipartFile multipartFile);

	String checkExist(Long userId, String username, String mobile, String email);
}
