package com.wms_main.model.vo.wms;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.Collections;
import java.util.List;
import java.util.function.Function;

/**
 * 分页结果
 * @param <T> vo泛型
 */
@Data
public class PageVo<T> {
    /**
     * 总数
     */
    @JsonProperty("total")
    private Long total;
    /**
     * 页数
     */
    @JsonProperty("pages")
    private Long pages;
    /**
     * 结果集
     */
    @JsonProperty("lists")
    private List<T> lists;

    /**
     * 将数据库集合转换为分页结果
     * @param page 数据库查询结果
     * @param converter 转换方法
     * @return 转换后的分页结果
     * @param <PO> 数据库结果集
     * @param <VO> 前端显示结果集
     */
    public static <PO, VO> PageVo<VO> of(Page<PO> page, Function<PO, VO> converter) {
        PageVo<VO> pageVo = new PageVo<>();
        // 设置总数
        pageVo.setTotal(page.getTotal());
        // 设置总页数
        pageVo.setPages(page.getPages());
        if (page.getRecords().isEmpty()) {
            pageVo.setLists(Collections.emptyList());
            return pageVo;
        }
        pageVo.setLists(page.getRecords().stream().map(converter).toList());
        return pageVo;
    }
}
