package cn.iocoder.yudao.module.employee.convert.info;

import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoRespVO;
import cn.iocoder.yudao.module.employee.dal.dataobject.info.EmployeeInfoDO;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO;
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostSimpleRespVO;
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSimpleRespVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.profile.UserProfileRespVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserRespVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSimpleRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Mapper
public interface EmployeeConvert {

    EmployeeConvert INSTANCE = Mappers.getMapper(EmployeeConvert.class);

    default List<EmployeeInfoRespVO> convertList(List<EmployeeInfoDO> list,
                                                 Map<Long, DeptDO> deptMap,
                                                 Map<Long, PostDO> postMap) {
        return list.stream()
                .map(emp -> convert(emp, deptMap.getOrDefault(emp.getDeptId(), null), postMap.getOrDefault(emp.getPostId(), null)))
                .collect(Collectors.toList());
    }

    default EmployeeInfoRespVO convert(EmployeeInfoDO emp, DeptDO dept, PostDO post) {
        EmployeeInfoRespVO vo = BeanUtils.toBean(emp, EmployeeInfoRespVO.class);
        if (dept != null) {
            vo.setDeptName(dept.getName());
        }
        if (post != null) {
            vo.setPosition(post.getName());
        }
        return vo;
    }

}
