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

import com.skr.mdm.bean.qo.system.DepartmentMoveQO;
import com.skr.mdm.bean.qo.system.DepartmentQO;
import com.skr.mdm.dto.LoginAdminDTO;
import com.skr.mdm.result.ResponseResult;
import org.springframework.web.multipart.MultipartFile;

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

public interface DepartmentService {

    /**
     * 部门树
     *
     * @param adminId       管理员ID
     * @param userFlag      是否返回部门用户对象
     * @param loginAdminDTO 当前管理员
     * @return 响应对象
     */
    ResponseResult deptTree(Integer adminId, Boolean userFlag, LoginAdminDTO loginAdminDTO);

    /**
     * 添加部门
     *
     * @param departmentQO  请求对象
     * @param loginAdminDTO 当前管理员
     * @return 响应对象
     */
    ResponseResult addDept(DepartmentQO departmentQO, LoginAdminDTO loginAdminDTO);

    /**
     * 编辑部门
     *
     * @param departmentQO  请求对象
     * @param loginAdminDTO 当前管理员
     * @return 响应对象
     */
    ResponseResult updateDept(DepartmentQO departmentQO, LoginAdminDTO loginAdminDTO);

    /**
     * 删除部门
     *
     * @param deptIdList    部门ID集合
     * @param loginAdminDTO 当前管理员
     * @return 响应对象
     */
    ResponseResult deleteDept(List<Integer> deptIdList, LoginAdminDTO loginAdminDTO);

    /**
     * 移动部门
     *
     * @param departmentMoveQOList 请求对象
     * @param loginAdminDTO        当前管理员
     * @return 响应对象
     */
    ResponseResult moveDept(List<DepartmentMoveQO> departmentMoveQOList, LoginAdminDTO loginAdminDTO);

    /**
     * 部门批量导入
     *
     * @param file          导入文件
     * @param loginAdminDTO 当前管理员
     * @return 响应对象
     * @throws IOException e
     */
    ResponseResult importDept(MultipartFile file, LoginAdminDTO loginAdminDTO) throws IOException;

    /**
     * 保存超管部门权限
     *
     * @param deptIdList    部门ID集合
     * @param loginAdminDTO 当前管理员
     */
    void saveAdminDept(List<Integer> deptIdList, LoginAdminDTO loginAdminDTO);

    /**
     * 获取部门全路径
     *
     * @param deptId 部门ID
     * @return 部门全路径
     */
    String getFullDept(Integer deptId);

    Map<String, Integer> getDeptPathMap(Integer companyId);
}
