package cn.newfeifan.mall.module.product.convert.spuapply;

import cn.newfeifan.mall.framework.common.util.collection.CollectionUtils;
import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
import cn.newfeifan.mall.module.product.controller.admin.skuapply.vo.SkuApplyRespVO;
import cn.newfeifan.mall.module.product.controller.admin.spuapply.vo.SpuApplyRespVO;
import cn.newfeifan.mall.module.product.dal.dataobject.skuapply.SkuApplyDO;
import cn.newfeifan.mall.module.product.dal.dataobject.spuapply.SpuApplyDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;
import java.util.Map;

import static cn.newfeifan.mall.framework.common.util.collection.CollectionUtils.convertMultiMap;

/**
 * 商品 SPU 申请 Convert
 *
 * @author 非繁源码
 */

@Mapper
public interface SpuApplyConvert {

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

    default SpuApplyRespVO convert(SpuApplyDO spu, List<SkuApplyDO> skus) {
        SpuApplyRespVO spuVO = BeanUtils.toBean(spu, SpuApplyRespVO.class);
        spuVO.setSkus(BeanUtils.toBean(skus, SkuApplyRespVO.class));
        return spuVO;
    }

    default List<SpuApplyRespVO> convertForSpuDetailRespListVO(List<SpuApplyDO> spus, List<SkuApplyDO> skus) {
        Map<Long, List<SkuApplyDO>> skuMultiMap = convertMultiMap(skus, SkuApplyDO::getSpuApplyId);
        return CollectionUtils.convertList(spus, spu -> convert(spu, skuMultiMap.get(spu.getId())));
    }

}
