import { Fs, File, FileInfo, OverlayFs as IOverlayFs, DirsMerger, OverlayFsOptions } from '../type';
import { OverlayOptions } from '../../../domain/fs/vo/overlayoptions';
/**
 * OverlayFs entity - main overlay filesystem implementation
 * TypeScript version of Go's OverlayFs struct
 */
export declare class OverlayFs implements IOverlayFs {
    private fss;
    private mergeDirs;
    private firstWritable;
    constructor(options: OverlayOptions);
    /**
     * Get filesystem name
     */
    name(): string;
    /**
     * Implementation of FilesystemIterator interface
     */
    filesystem(i: number): Fs | null;
    /**
     * Get number of filesystems in overlay
     */
    numFilesystems(): number;
    /**
     * Append filesystems to overlay (returns new instance)
     */
    append(...fss: Fs[]): OverlayFs;
    /**
     * Set directory merger (returns new instance)
     */
    withDirsMerger(merger: DirsMerger): OverlayFs;
    /**
     * Get writable filesystem (first filesystem if firstWritable is true)
     */
    private writeFs;
    /**
     * Collect directories from all filesystems
     */
    private collectDirs;
    /**
     * Recursively collect directories from filesystem hierarchy
     */
    private collectDirsRecursive;
    /**
     * Stat file/directory across all filesystems
     */
    private statInternal;
    /**
     * Recursive stat implementation
     */
    private statRecursive;
    /**
     * Check if error is "not exist" error
     */
    private isNotExistError;
    /**
     * Create a file (write operation)
     */
    create(name: string): Promise<File>;
    /**
     * Create directory (write operation)
     */
    mkdir(name: string, perm: number): Promise<void>;
    /**
     * Create directory tree (write operation)
     */
    mkdirAll(path: string, perm: number): Promise<void>;
    /**
     * Open file for reading (searches all filesystems)
     */
    open(name: string): Promise<File>;
    /**
     * Open file with flags (write operations use first filesystem)
     */
    openFile(name: string, flag: number, perm: number): Promise<File>;
    /**
     * Remove file (write operation)
     */
    remove(name: string): Promise<void>;
    /**
     * Remove directory tree (write operation)
     */
    removeAll(path: string): Promise<void>;
    /**
     * Rename file (write operation)
     */
    rename(oldname: string, newname: string): Promise<void>;
    /**
     * Get file info (searches all filesystems)
     */
    stat(name: string): Promise<FileInfo>;
    /**
     * Change file mode (write operation)
     */
    chmod(name: string, mode: number): Promise<void>;
    /**
     * Change file ownership (write operation)
     */
    chown(name: string, uid: number, gid: number): Promise<void>;
    /**
     * Change file times (write operation)
     */
    chtimes(name: string, atime: Date, mtime: Date): Promise<void>;
}
/**
 * Factory function to create new OverlayFs
 */
export declare function newOverlayFs(options: OverlayOptions): OverlayFs;
/**
 * Create OverlayFs from raw options
 */
export declare function createOverlayFs(opts: OverlayFsOptions): OverlayFs;
//# sourceMappingURL=overlayfs.d.ts.map