package com.pig4cloud.pig.statistics.Util;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.Collections;
import java.util.List;

/**
 * 分页工具类
 * @author wcl
 * @date 2025/8/20 15:00
 * @description: 分页工具类，提供通用的分页逻辑处理
 */
public class PageUtils {

    /**
     * 构建分页结果
     * @param data 原始数据列表
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @param <T> 数据类型
     * @return 分页结果
     */
    public static <T> Page<T> buildPage(List<T> data, Integer pageNum, Integer pageSize) {
        int currentPage = pageNum == null ? 1 : pageNum;
        int size = pageSize == null ? 10 : pageSize;
        
        // 如果pageSize超过数据总量，则返回所有数据
        if (size >= data.size()) {
            Page<T> page = new Page<>();
            page.setCurrent(1);
            page.setSize(data.size());
            page.setTotal(data.size());
            page.setPages(1);
            page.setRecords(data);
            return page;
        }
        
        // 确保页码在有效范围内
        int totalPages = (data.size() + size - 1) / size;
        if (currentPage > totalPages && totalPages > 0) {
            currentPage = totalPages;
        }
        if (currentPage < 1) {
            currentPage = 1;
        }
        
        // 计算分页索引
        int fromIndex = (currentPage - 1) * size;
        int toIndex = Math.min(fromIndex + size, data.size());
        List<T> pageRecords = fromIndex < data.size() ? data.subList(fromIndex, toIndex) : Collections.emptyList();
        
        // 构建分页结果
        Page<T> page = new Page<>();
        page.setCurrent(currentPage);
        page.setSize(size);
        page.setTotal(data.size());
        page.setPages(totalPages);
        page.setRecords(pageRecords);
        
        return page;
    }
    
    /**
     * 构建分页结果（重载方法，支持默认分页参数）
     * @param data 原始数据列表
     * @param <T> 数据类型
     * @return 分页结果（默认第1页，每页10条）
     */
    public static <T> Page<T> buildPage(List<T> data) {
        return buildPage(data, 1, 10);
    }
} 