package org.kne.cloud.network.congestion;
import java.util.List;
import java.util.function.Consumer;

/**
 * 消息批处理器接口
 * 提供批量消息处理功能，支持按数量和时间触发批量发送
 */
public interface MessageBatcher<T> {
    
    // ==================== 配置相关方法 ====================
    
    /**
     * 获取批处理大小
     * @return 批处理大小
     */
    int getBatchSize();
    
    /**
     * 获取最大延迟时间
     * @return 最大延迟时间（纳秒）
     */
    long getMaxDelay();
    
    /**
     * 设置消息消费者回调函数
     * @param consumer 消费者回调
     */
    void setConsumer(Consumer<List<T>> consumer);
    
    // ==================== 消息操作方法 ====================
    
    /**
     * 添加消息到批处理器
     * @param message 消息对象
     */
    void putMessage(T message);
    
    /**
     * 批量添加消息
     * @param messages 消息列表
     */
    void putMessages(List<T> messages);
    
    /**
     * 立即刷新并发送所有待处理消息
     */
    void flush();
    
    // ==================== 状态查询方法 ====================
    
    /**
     * 获取当前队列中的消息数量
     * @return 队列大小
     */
    int getQueueSize();
    
    
    // ==================== 生命周期管理方法 ====================
    
    /**
     * 检查批处理器是否停止
     * @return 是否停止
     */
    boolean isClosed();
    
    
    /**
     * 停止批处理器
     */
    void close();
}