package top.imwork.window.silos.convert;

import org.springframework.util.ObjectUtils;
import top.imwork.window.silos.entity.Categories;
import top.imwork.window.silos.pojo.bo.CategoriesBO;
import top.imwork.window.silos.pojo.bo.CategoriesResultBO;
import top.imwork.window.silos.pojo.dto.CategoriesDTO;
import top.imwork.window.silos.pojo.dto.CategoriesListDTO;
import top.imwork.window.silos.pojo.po.CategoriesListParamVO;
import top.imwork.window.silos.pojo.po.CategoriesParamVO;
import top.imwork.window.silos.pojo.vo.CategoriesResultVO;
import top.imwork.window.silos.pojo.vo.CategoriesVO;

import java.util.ArrayList;
import java.util.List;

/**
 * 图书分类
 * 实体转换
 *
 * @author jiangxiaowei
 * email: e-jiangxiaowei@outlook.com
 * date: 2025-11-01 17:13:36
 */
public class CategoriesConvert {
    private CategoriesConvert() {}

    public static Categories categoriesDtoToDo(CategoriesDTO categoriesDTO) {
        if (categoriesDTO == null) {
            return null;
        }
        Categories categories = new Categories();
        categories.setId(categoriesDTO.getId());
        categories.setCategoryCode(categoriesDTO.getCategoryCode());
        categories.setCategoryName(categoriesDTO.getCategoryName());
        categories.setEnglishName(categoriesDTO.getEnglishName());
        categories.setCategoryColor(categoriesDTO.getCategoryColor());
        categories.setCategoryIcon(categoriesDTO.getCategoryIcon());
        categories.setParentId(categoriesDTO.getParentId());
        categories.setLevel(categoriesDTO.getLevel());
        categories.setPath(categoriesDTO.getPath());
        categories.setSortOrder(categoriesDTO.getSortOrder());
        categories.setDescription(categoriesDTO.getDescription());
        categories.setKeywords(categoriesDTO.getKeywords());
        categories.setCategoryStatus(categoriesDTO.getCategoryStatus());
        categories.setIsVisible(categoriesDTO.getIsVisible());
        categories.setDelFlag(categoriesDTO.getDelFlag());
        categories.setCreator(categoriesDTO.getCreator());
        categories.setCreateTime(categoriesDTO.getCreateTime());
        categories.setModifier(categoriesDTO.getModifier());
        categories.setUpdateTime(categoriesDTO.getUpdateTime());
        categories.setRemark(categoriesDTO.getRemark());
        return categories;
    }

    public static CategoriesBO categoriesDoToBo(Categories categories) {
        if (categories == null) {
            return null;
        }
        CategoriesBO categoriesBO = new CategoriesBO();
        categoriesBO.setId(categories.getId());
        categoriesBO.setCategoryCode(categories.getCategoryCode());
        categoriesBO.setCategoryName(categories.getCategoryName());
        categoriesBO.setEnglishName(categories.getEnglishName());
        categoriesBO.setCategoryColor(categories.getCategoryColor());
        categoriesBO.setCategoryIcon(categories.getCategoryIcon());
        categoriesBO.setParentId(categories.getParentId());
        categoriesBO.setLevel(categories.getLevel());
        categoriesBO.setPath(categories.getPath());
        categoriesBO.setSortOrder(categories.getSortOrder());
        categoriesBO.setDescription(categories.getDescription());
        categoriesBO.setKeywords(categories.getKeywords());
        categoriesBO.setCategoryStatus(categories.getCategoryStatus());
        categoriesBO.setIsVisible(categories.getIsVisible());
        categoriesBO.setDelFlag(categories.getDelFlag());
        categoriesBO.setCreator(categories.getCreator());
        categoriesBO.setCreateTime(categories.getCreateTime());
        categoriesBO.setModifier(categories.getModifier());
        categoriesBO.setUpdateTime(categories.getUpdateTime());
        categoriesBO.setRemark(categories.getRemark());
        return categoriesBO;
    }

    public static CategoriesDTO categoriesParamVoToDto(CategoriesParamVO categoriesParamVO) {
        if (categoriesParamVO == null) {
            return null;
        }
        CategoriesDTO categoriesDTO = new CategoriesDTO();
        categoriesDTO.setId(categoriesParamVO.getId());
        categoriesDTO.setCategoryCode(categoriesParamVO.getCategoryCode());
        categoriesDTO.setCategoryName(categoriesParamVO.getCategoryName());
        categoriesDTO.setEnglishName(categoriesParamVO.getEnglishName());
        categoriesDTO.setCategoryColor(categoriesParamVO.getCategoryColor());
        categoriesDTO.setCategoryIcon(categoriesParamVO.getCategoryIcon());
        categoriesDTO.setParentId(categoriesParamVO.getParentId());
        categoriesDTO.setLevel(categoriesParamVO.getLevel());
        categoriesDTO.setPath(categoriesParamVO.getPath());
        categoriesDTO.setSortOrder(categoriesParamVO.getSortOrder());
        categoriesDTO.setDescription(categoriesParamVO.getDescription());
        categoriesDTO.setKeywords(categoriesParamVO.getKeywords());
        categoriesDTO.setCategoryStatus(categoriesParamVO.getCategoryStatus());
        categoriesDTO.setIsVisible(categoriesParamVO.getIsVisible());
        categoriesDTO.setDelFlag(categoriesParamVO.getDelFlag());
        categoriesDTO.setCreator(categoriesParamVO.getCreator());
        categoriesDTO.setCreateTime(categoriesParamVO.getCreateTime());
        categoriesDTO.setModifier(categoriesParamVO.getModifier());
        categoriesDTO.setUpdateTime(categoriesParamVO.getUpdateTime());
        categoriesDTO.setRemark(categoriesParamVO.getRemark());
        return categoriesDTO;
    }

    public static List<CategoriesBO> categoriesListToCategoriesBOList(List<Categories> records) {
         if (ObjectUtils.isEmpty(records)) {
             return new ArrayList<>();
         }
         List<CategoriesBO> categoriesBOList = new ArrayList<>();
         for (Categories categories : records) {
             categoriesBOList.add(categoriesDoToBo(categories));
         }
         return categoriesBOList;
    }

    public static CategoriesVO categoriesBoToVo(CategoriesBO categoriesBO) {
        if (categoriesBO == null) {
            return null;
        }
        CategoriesVO categoriesVO = new CategoriesVO();
        categoriesVO.setId(categoriesBO.getId());
        categoriesVO.setCategoryCode(categoriesBO.getCategoryCode());
        categoriesVO.setCategoryName(categoriesBO.getCategoryName());
        categoriesVO.setEnglishName(categoriesBO.getEnglishName());
        categoriesVO.setCategoryColor(categoriesBO.getCategoryColor());
        categoriesVO.setCategoryIcon(categoriesBO.getCategoryIcon());
        categoriesVO.setParentId(categoriesBO.getParentId());
        categoriesVO.setLevel(categoriesBO.getLevel());
        categoriesVO.setPath(categoriesBO.getPath());
        categoriesVO.setSortOrder(categoriesBO.getSortOrder());
        categoriesVO.setDescription(categoriesBO.getDescription());
        categoriesVO.setKeywords(categoriesBO.getKeywords());
        categoriesVO.setCategoryStatus(categoriesBO.getCategoryStatus());
        categoriesVO.setIsVisible(categoriesBO.getIsVisible());
        categoriesVO.setDelFlag(categoriesBO.getDelFlag());
        categoriesVO.setCreator(categoriesBO.getCreator());
        categoriesVO.setCreateTime(categoriesBO.getCreateTime());
        categoriesVO.setModifier(categoriesBO.getModifier());
        categoriesVO.setUpdateTime(categoriesBO.getUpdateTime());
        categoriesVO.setRemark(categoriesBO.getRemark());
        return categoriesVO;
    }

    public static CategoriesListDTO categoriesListParamVoToDTO(CategoriesListParamVO categoriesListParamVO) {
        if (categoriesListParamVO == null) {
            return new CategoriesListDTO();
        }
        CategoriesListDTO categoriesListDTO = new CategoriesListDTO();
        categoriesListDTO.setCategoriesName(categoriesListParamVO.getCategoriesName());
        categoriesListDTO.setPageNo(categoriesListParamVO.getPageNo());
        categoriesListDTO.setPageRows(categoriesListParamVO.getPageRows());
        categoriesListDTO.setDelFlag(categoriesListParamVO.getDelFlag());
        categoriesListDTO.setCreator(categoriesListParamVO.getCreator());
        categoriesListDTO.setCreateBeginTime(categoriesListParamVO.getCreateBeginTime());
        categoriesListDTO.setCreateEndTime(categoriesListParamVO.getCreateEndTime());
        categoriesListDTO.setModifier(categoriesListParamVO.getModifier());
        categoriesListDTO.setUpdateBeginTime(categoriesListParamVO.getUpdateBeginTime());
        categoriesListDTO.setUpdateEndTime(categoriesListParamVO.getUpdateEndTime());
        categoriesListDTO.setRemark(categoriesListParamVO.getRemark());
        return categoriesListDTO;
    }
        
    public static CategoriesListParamVO categoriesListParamDtoToVo(CategoriesListDTO categoriesListDTO) {
        if (categoriesListDTO == null) {
            return new CategoriesListParamVO();
        }
        CategoriesListParamVO categoriesListParamVO = new CategoriesListParamVO();
        categoriesListParamVO.setCategoriesName(categoriesListDTO.getCategoriesName());
        categoriesListParamVO.setPageNo(categoriesListDTO.getPageNo());
        categoriesListParamVO.setPageRows(categoriesListDTO.getPageRows());
        categoriesListParamVO.setDelFlag(categoriesListDTO.getDelFlag());
        categoriesListParamVO.setCreator(categoriesListDTO.getCreator());
        categoriesListParamVO.setCreateBeginTime(categoriesListDTO.getCreateBeginTime());
        categoriesListParamVO.setCreateEndTime(categoriesListDTO.getCreateEndTime());
        categoriesListParamVO.setModifier(categoriesListDTO.getModifier());
        categoriesListParamVO.setUpdateBeginTime(categoriesListDTO.getUpdateBeginTime());
        categoriesListParamVO.setUpdateEndTime(categoriesListDTO.getUpdateEndTime());
        categoriesListParamVO.setRemark(categoriesListDTO.getRemark());
        return categoriesListParamVO;
    }

    private static List<CategoriesVO> categoriesBoListToCategoriesVoList(List<CategoriesBO> dataList) {
        if (ObjectUtils.isEmpty(dataList)) {
            return new ArrayList<>();
        }
        List<CategoriesVO> categoriesVOList = new ArrayList<>();
        for (CategoriesBO categoriesBO : dataList) {
             categoriesVOList.add(categoriesBoToVo(categoriesBO));
        }
        return categoriesVOList;
    }

    public static CategoriesResultVO categoriesResultBoToVo(CategoriesResultBO categoriesResultBO) {
        if (categoriesResultBO == null) {
            return new CategoriesResultVO();
        }
        CategoriesResultVO categoriesResultVO = new CategoriesResultVO();
        categoriesResultVO.setPageNo(categoriesResultBO.getPageNo());
        categoriesResultVO.setPageRows(categoriesResultBO.getPageRows());
        categoriesResultVO.setPageCount(categoriesResultBO.getPageCount());
        categoriesResultVO.setTotalRows(categoriesResultBO.getTotalRows());
        categoriesResultVO.setDataList(categoriesBoListToCategoriesVoList(categoriesResultBO.getDataList()));
        categoriesResultVO.setParams(categoriesListParamDtoToVo(categoriesResultBO.getParams()));
        return categoriesResultVO;
    }
}