package com.codvision.auth.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.codvision.auth.entity.SysRole;
import com.codvision.auth.entity.SysUser;
import com.codvision.auth.entity.UserOrgRole;
import com.codvision.auth.entity.dto.SysUserDTO;
import com.codvision.auth.entity.dto.SysUserQueryDTO;
import com.codvision.auth.entity.excel.SysUserExcel;
import com.codvision.auth.entity.vo.OrgVO;
import com.codvision.auth.entity.vo.SysUserVO;
import com.codvision.webcore.bean.QueryPage;
import com.codvision.webcore.service.IBaseService;
import org.springframework.web.multipart.MultipartFile;

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

/**
 * <p>
 * 系统用户 服务类
 * </p>
 *
 * @author lingee
 * @since 2023-11-09
 */
public interface ISysUserService extends IBaseService<SysUser, SysUserVO> {

    /**
     * 获取系统用户详情
     *
     * @param id
     * @return 系统用户
     */
    SysUserVO getDetail(Integer id);

    /**
     * 批量重置密码
     *
     * @param userIds
     */
    void batchResetPwd(List<Integer> userIds);

    /**
     * 切换用户所属组织及对应角色
     *
     * @param userOrgRole 用户组织权限
     * @param sysUserVO   系统用户信息
     */
    void activeOrgRole(UserOrgRole userOrgRole, SysUserVO sysUserVO);

    /**
     * 根据登录名获取系统用户
     *
     * @param loginName 登录名
     * @return 系统用户
     */
    SysUserVO getDetailByLoginName(String loginName);

    /**
     * 检查密码是否更新
     *
     * @param username 用户名
     * @return true or false
     */
    boolean isRenewPwd(String username);

    /**
     * 一键登录
     *
     * @param token           token
     * @param userInformation 用户信息
     * @return 登录结果
     */
    String quickLogin(String token, String userInformation);

    /**
     * 根据手机号登录
     *
     * @param mobile 手机号
     */
    void loginByMobile(String mobile);

    /**
     * 新增系统用户
     *
     * @param sysUserDTO 系统用户
     * @return
     */
    Integer addSysUser(SysUserDTO sysUserDTO);

    /**
     * 根据用户id获取用户详情
     *
     * @param uid 用户Id
     * @return 用户详情
     */
    SysUserVO getDetailByUid(Integer uid);

    /**
     * 分页查询系统用户列表
     *
     * @param queryPage 分页参数
     * @param queryDTO  查询参数
     * @return 分页结果
     */
    IPage<SysUserVO> findAll(QueryPage<SysUser> queryPage, SysUserQueryDTO queryDTO);

    /**
     * 更新系统用户
     *
     * @param sysUserDTO 系统用户信息
     */
    void updateUser(SysUserDTO sysUserDTO);

    /**
     * 导入用户信息
     *
     * @param file 用户信息文件
     * @return 导入结果
     */
    String excelImport(MultipartFile file);

    /**
     * excel保存
     *
     * @param cachedDataList 缓存数据列表
     * @param orgList        组织列表
     * @param sysRoleList    角色列表
     */
    void excelSave(List<SysUserExcel> cachedDataList, List<OrgVO> orgList, List<SysRole> sysRoleList);

    /**
     * excel导出
     *
     * @param queryDTO 查询条件
     */
    void excelExport(SysUserQueryDTO queryDTO);

    /**
     * 根据钉钉用户id获取用户信息
     *
     * @param dingTalkUid 钉钉用户id
     * @return 用户信息
     */
    SysUserVO getByDingTalkUid(String dingTalkUid);

    /**
     * 根据浙政钉id获取用户信息
     *
     * @param zzdId 浙政钉id
     * @return 用户信息
     */
    SysUserVO getByZzdId(String zzdId);

    /**
     * 获取用户列表
     * @param params 查询参数
     * @return 用户列表
     */
    List<SysUserVO> listUsers(Map<String, Object> params);

    /**
     * 批量获取用户信息
     * @param uidList 用户ID
     * @return 用户信息
     */
    List<SysUserVO> getListByIds(List<Integer> uidList);
}
