package cn.iocoder.yudao.module.employee.api;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.employee.api.dto.*;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 员工 API 接口
 *
 * @author zhaopq
 */
public interface EmployeeApi {

    /**
     * 根据id查询员工信息
     *
     * @param id 用户ID
     * @return 员工对象信息
     */
    EmployeeRespDTO getEmployeeById(Long id);

    /**
     * 根据id集合查询员工信息列表
     *
     * @param ids id集合
     * @return 员工对象信息
     */
    List<EmployeeRespDTO> getEmployeeListByIds(Collection<Long> ids);

    /**
     * 获得员工 Map
     *
     * @param ids 用户编号数组
     * @return 用户 Map
     */
    default Map<Long, EmployeeRespDTO> getEmployeeMap(Collection<Long> ids) {
        List<EmployeeRespDTO> employeeListByIds = getEmployeeListByIds(ids);
        return CollectionUtils.convertMap(employeeListByIds, EmployeeRespDTO::getId);
    }

    /**
     * 根据用户id查询对应员工信息
     *
     * @param userId 用户ID
     * @return 员工对象信息
     */
    EmployeeRespDTO getEmployeeByUserId(Long userId);

    /**
     * 根据用户id查询对应员工信息
     *
     * @param userIds 用户ID
     * @return 员工对象信息
     */
    List<EmployeeRespDTO> getEmployeeListByUserIds(Collection<Long> userIds);

    /**
     * 创建员工
     *
     * @param reqDTO
     * @return
     */
    Long createEmployee(@Valid EmployeeCreateReqDTO reqDTO);

    /**
     * 更新员工
     *
     * @param reqDTO
     * @return
     */
    Integer updateEmployee(@Valid EmployeeSaveReqDTO reqDTO);

    /**
     * 查询员工
     *
     * @param reqDTO
     * @return
     */
    EmployeeRespDTO getEmployee(@Valid EmployeeQueryReqDTO reqDTO);

    /**
     * 查询员工分页
     *
     * @param pageReqVO
     * @return
     */
    PageResult<EmployeeRespDTO> getEmployeePage(@Valid EmployeePageReqDTO pageReqVO);
}
