import type { LoopKitConfig, IQueueManager, INetworkManager, TrackEvent, IdentifyEvent, GroupEvent } from '../types/index.js';
import type { Logger } from '../utils/Logger.js';
import type { StorageManager } from './StorageManager.js';
interface QueuedEvent {
    type: 'track' | 'identify' | 'group';
    event: TrackEvent | IdentifyEvent | GroupEvent;
}
/**
 * Queue manager for handling event batching and flushing
 */
export declare class QueueManager implements IQueueManager {
    private config;
    private logger;
    private storageManager;
    private networkManager?;
    eventQueue: QueuedEvent[];
    private flushTimer?;
    private isInitialized;
    constructor(config: LoopKitConfig, logger: Logger, storageManager: StorageManager);
    /**
     * Add event to queue
     */
    enqueueEvent(event: TrackEvent | IdentifyEvent | GroupEvent): void;
    /**
     * Flush events to API
     */
    flush(networkManager: INetworkManager): Promise<void>;
    /**
     * Get current queue
     */
    getQueue(): QueuedEvent[];
    /**
     * Get queue size
     */
    getQueueSize(): number;
    /**
     * Clear queue
     */
    clearQueue(): void;
    /**
     * Reset queue state
     */
    reset(): void;
    /**
     * Update configuration
     */
    updateConfig(config: LoopKitConfig): void;
    /**
     * Set network manager
     */
    setNetworkManager(networkManager: INetworkManager): void;
    /**
     * Schedule auto-flush
     */
    scheduleFlush(): void;
    /**
     * Restart auto-flush with new config
     */
    restartAutoFlush(): void;
    /**
     * Stop auto-flush timer
     */
    private stopAutoFlush;
    /**
     * Persist queue to storage
     */
    private persistQueue;
    /**
     * Load persisted queue from storage
     */
    private loadPersistedQueue;
}
export {};
//# sourceMappingURL=QueueManager.d.ts.map