import { DataChange } from '../types/Queue';
import { DatabaseAdapter } from '../types/DatabaseAdapter';
export interface SyncOptions {
    batchSize?: number;
    maxPayloadSize?: number;
    autoSync?: boolean;
    syncInterval?: number;
    retryCount?: number;
    onProgress?: (progress: SyncProgress) => void;
    onError?: (error: Error) => void;
}
export interface SyncProgress {
    phase: 'push' | 'pull' | 'complete';
    processed: number;
    total: number;
    details?: any;
}
export interface CloudAdapter {
    processSyncQueue(changes: DataChange[]): Promise<SyncResponse>;
    fetchChanges(query: {
        since: number;
    }): Promise<SyncDataResponse>;
}
export interface SyncResponse {
    success: boolean;
    error?: string;
    processed?: number;
    info?: {
        used: number;
        quota: number;
    };
}
export interface SyncDataResponse {
    success: boolean;
    error?: string;
    changes?: DataChange[];
    timestamp?: number;
}
export declare enum SyncStatus {
    Idle = "idle",
    Uploading = "uploading",
    Downloading = "downloading",
    Error = "error",
    Offline = "offline"
}
export declare class SyncEngine {
    private localAdapter;
    private cloudAdapter;
    private options;
    private pendingQueue;
    private status;
    private syncVersion;
    private isSyncing;
    private syncTimer;
    private errorMessage;
    constructor(localAdapter: DatabaseAdapter, cloudAdapter: CloudAdapter, options?: SyncOptions);
    getStatus(): {
        status: SyncStatus;
        errorMessage: string;
        pendingChanges: number;
    };
    enqueueChanges(changes: DataChange[]): void;
    private debounceTimer;
    private debounceSync;
    startAutoSync(): void;
    stopAutoSync(): void;
    initSync(): Promise<void>;
    pushChanges(): Promise<void>;
    pullChanges(): Promise<void>;
    syncAll(): Promise<void>;
    private prepareBatch;
    private processRemoteChange;
    private estimateSize;
    clearPendingQueue(): void;
    destroy(): void;
}
