package com.srs.comprehensive.util;

import org.apache.poi.ss.formula.functions.T;

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

/**
 * list切割工具类
 */
public class ListSliceUtil {
    public static <T> List<List<T>> updateSlice(List<T> list){
        return sliceList(list, 1000);
    }
    
    /**
     * 插入数据时切割列表，使用较大的批次大小
     */
    public static <T> List<List<T>> insertSlice(List<T> list){
        return sliceList(list, 1000);
    }
    
    /**
     * 插入数据时切割列表，支持自定义批次大小
     * @param list 要切割的列表
     * @param batchSize 每批的大小
     * @return 切割后的列表集合
     */
    public static <T> List<List<T>> insertSlice(List<T> list, int batchSize){
        return sliceList(list, batchSize);
    }
    
    /**
     * 通用列表切割方法
     * @param list 要切割的列表
     * @param batchSize 每批的大小
     * @return 切割后的列表集合
     */
    private static <T> List<List<T>> sliceList(List<T> list, int batchSize){
        if (list == null || list.isEmpty()){
            return null;
        }
        
        int listSize = list.size();
        int batchCount = listSize / batchSize;
        int remainder = listSize % batchSize;
        
        if (remainder != 0){
            batchCount++;
        }
        
        List<List<T>> result = new ArrayList<>();
        int currentIndex = 0;
        
        for (int i = 0; i < batchCount; i++){
            List<T> batch = new ArrayList<>();
            int currentBatchSize = batchSize;
            
            // 最后一批可能不满
            if (remainder != 0 && i == batchCount - 1){
                currentBatchSize = remainder;
            }
            
            for (int j = 0; j < currentBatchSize; j++){
                batch.add(list.get(currentIndex));
                currentIndex++;
            }
            result.add(batch);
        }
        
        return result;
    }
}
