package com.skr.mdm.api.user.service;

import com.skr.mdm.bean.qo.user.UserAddUpdateQO;
import com.skr.mdm.bean.qo.user.UserDeptQO;
import com.skr.mdm.bean.qo.user.UserQO;
import com.skr.mdm.dto.LoginAdminDTO;
import com.skr.mdm.result.ResponseResult;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * @author nfq
 * @date 2022-11-15 18:20
 */
public interface UserService {

    /**
     * 根据部门查询用户
     *
     * @param userDeptQO 请求对象
     * @return 响应对象
     */
    ResponseResult listDeptUser(UserDeptQO userDeptQO, LoginAdminDTO loginAdminDTO);

    /**
     * 用户列表
     *
     * @param userQO        请求对象
     * @param loginAdminDTO 当前管理员
     * @return 响应对象
     */
    ResponseResult listUser(UserQO userQO, LoginAdminDTO loginAdminDTO);

    /**
     * 用户设备列表
     *
     * @param userId 用户ID
     * @return 响应对象
     */
    ResponseResult listUserEquipmentVO(Integer userId);

    /**
     * 添加用户
     *
     * @param userAddUpdateQO 请求对象
     * @param loginAdminDTO   当前管理员
     * @return 响应对象
     */
    ResponseResult addUser(UserAddUpdateQO userAddUpdateQO, LoginAdminDTO loginAdminDTO);

    /**
     * 编辑用户
     *
     * @param userAddUpdateQO 请求对象
     * @param loginAdminDTO   当前管理员
     * @return 响应对象
     */
    ResponseResult updateUser(UserAddUpdateQO userAddUpdateQO, LoginAdminDTO loginAdminDTO);

    /**
     * 删除用户
     *
     * @param userIdList    用户ID集合
     * @param loginAdminDTO 当前管理员
     * @return 响应对象
     */
    ResponseResult deleteUser(List<Integer> userIdList, LoginAdminDTO loginAdminDTO);

    /**
     * 用户批量导入
     *
     * @param file             导入文件
     * @param isAutoCreateDept 是否自动创建部门（0：否 1：是）
     * @param loginAdminDTO    当前管理员
     * @return 响应对象
     * @throws Exception e
     */
    ResponseResult importUser(MultipartFile file, Integer isAutoCreateDept, LoginAdminDTO loginAdminDTO) throws Exception;

    /**
     * 批量导出用户
     *
     * @param deptIdList    导出的部门ID集合
     * @param loginAdminDTO 当前管理员
     * @param response      导出文件
     */
    void exportUser(List<Integer> deptIdList, LoginAdminDTO loginAdminDTO, HttpServletResponse response) throws IOException;

    /**
     * 批量导出用户二维码
     * @param deptIdList 导出的部门ID集合
     * @param loginAdminDTO 当前管理员
     * @param response 导出文件
     */
    void exportUserQrCode(List<Integer> deptIdList, LoginAdminDTO loginAdminDTO, HttpServletResponse response) ;


}
