package cn.fateverse.common.core.convert;

import cn.hutool.core.collection.CollUtil;

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

/**
 * 基本转换定义
 *
 * @author Clay
 * @date 2024/09/29
 */
public interface BaseConvertDefine<DTO, Entity, VO> {

    /**
     * 实体到视图对象
     *
     * @param entity 实体
     * @return {@link VO}
     */
    VO entityToVo(Entity entity);

    /**
     * 业务对象到实体
     *
     * @param DTO 业务对象
     * @return {@link Entity}
     */
    Entity dtoToEntity(DTO DTO);

    /**
     * 从实体到视图对象
     *
     * @param list 列表
     * @return {@link List}<{@link VO}>
     */
    default List<VO> entityToVOList(List<Entity> list) {
        if (CollUtil.isEmpty(list)) {
            return Collections.emptyList();
        }
        return list.stream().map(this::entityToVo).collect(Collectors.toList());
    }

    /**
     * 业务对象到实体列表
     *
     * @param list 列表
     * @return {@link List}<{@link Entity}>
     */
    default List<Entity> dtoToEntityList(List<DTO> list) {
        if (CollUtil.isEmpty(list)) {
            return Collections.emptyList();
        }
        return list.stream().map(this::dtoToEntity).collect(Collectors.toList());
    }


}