import type { Readable } from "node:stream";
export interface StorageCapabilities {
    version: string;
    product: string;
    chunking: boolean;
    bigFileChunking: boolean;
    supportsSyncCollection: boolean;
    webhookListeners: boolean;
}
export interface RemoteItem {
    fileId: number;
    path: string;
    name: string;
    etag: string;
    size: number;
    mime: string;
    lastModified: Date;
}
export interface ListChangesResult {
    items: RemoteItem[];
    /** Étapes supprimées (fileId) */
    removedFileIds: number[];
    cursor: string;
    /** true quand le serveur ne supporte pas sync-collection (PROPFIND Depth:1 brut) */
    fullResync?: boolean;
}
export interface DirectUrlResult {
    url: string;
    expiresAt: Date;
}
/**
 * Connecteur de stockage familial — point d'extension prévu pour les
 * connecteurs distants (Nextcloud en v1, Immich branchable en v2).
 *
 * Le stockage local de cette V1 n'entre pas dans cette forme « sync » :
 * les routes media utilisent LocalStorageConnector (écriture/lecture
 * directes sur disque). L'interface est conservée telle quelle pour les
 * futurs connecteurs distants.
 */
export interface StorageConnector {
    probe(): Promise<StorageCapabilities>;
    ensureRoot(folder: string): Promise<{
        fileId: number;
        path: string;
    }>;
    listChanges(cursor: string | null): Promise<ListChangesResult>;
    getDirectUrl(fileId: number): Promise<DirectUrlResult>;
    getThumbnail(fileId: number, size: number): Promise<Readable>;
}
