import { DeltaModel, DatabaseAdapter, Attachment, DataChange, QueryOptions } from './types';
import { LocalCoordinator } from './LocalCoordinator';
import { EncryptionConfig } from './SyncConfig';
export declare enum SyncStatus {
    Error = -2,// Error or offline status
    Offline = -1,// Error or offline status
    Idle = 0,// Idle status
    Uploading = 1,// Upload synchronization in progress
    Downloading = 2,// Download synchronization in progress
    Operating = 3,// Operation in progress (clearing notes and other special operations)
    Maintaining = 4
}
export interface SyncClientInitOptions {
    localAdapter: DatabaseAdapter;
    encryptionConfig?: EncryptionConfig;
    syncOption?: SyncOptions;
}
export interface SyncOptions {
    autoSync?: {
        enabled?: boolean;
        interval?: number;
        retryDelay?: number;
    };
    onStatusUpdate?: (status: SyncStatus) => void;
    onVersionUpdate?: (version: number) => void;
    onChangePulled?: (changes: DataChange[]) => void;
    onChangePushed?: (changes: DataChange[]) => void;
    encryption?: EncryptionConfig;
    maxRetries?: number;
    timeout?: number;
    maxFileSize?: number;
    batchSize?: number;
    payloadSize?: number;
    fileChunkSize?: number;
}
export declare class SyncClient {
    private localAdapter;
    private localCoordinator;
    private cloudCoordinator?;
    private syncManager?;
    private syncOptions;
    private autoSyncTimer?;
    private syncStatus;
    private currentVersion;
    private cloudConfigured;
    constructor(options: SyncClientInitOptions);
    private initialize;
    enableAutoSync(interval?: number): void;
    disableAutoSync(): void;
    private scheduleNextSync;
    updateSyncOptions(options: Partial<SyncOptions>): void;
    setCloudAdapter(cloudAdapter: DatabaseAdapter): Promise<void>;
    private updateSyncStatus;
    query<T extends DeltaModel>(storeName: string, options?: QueryOptions): Promise<T[]>;
    save<T extends DeltaModel>(storeName: string, data: T | T[]): Promise<T[]>;
    delete(storeName: string, ids: string | string[]): Promise<void>;
    readFile(fileId: string): Promise<Blob | ArrayBuffer | null>;
    attach(storeId: string, modelId: string, file: File | Blob | ArrayBuffer, filename: string, mimeType: string, metadata?: any): Promise<Attachment>;
    detach(storeName: string, modelId: string, attachmentId: string): Promise<DeltaModel>;
    sync(): Promise<boolean>;
    push(): Promise<boolean>;
    pull(): Promise<boolean>;
    getlocalCoordinator(): LocalCoordinator;
    getlocalAdapter(): DatabaseAdapter;
    getSyncOptions(): SyncOptions;
    dispose(): void;
    disconnectCloud(): void;
}
