import { Stats } from 'fs';
import { FileLockManager } from '../security/fileLockManager.js';
import { ElementType } from '../portfolio/types.js';
export interface FileReadOptions {
    encoding?: BufferEncoding;
    source?: string;
    /** Override maximum file size for this operation (in bytes) */
    maxSize?: number;
}
export interface FileWriteOptions {
    encoding?: BufferEncoding;
    source?: string;
    atomic?: boolean;
    /** Override maximum file size for this operation (in bytes) */
    maxSize?: number;
}
export interface FileOperationOptions {
    source?: string;
}
export interface FileOperationsConfig {
    /** Enable verbose audit logging for read operations (default: false) */
    verboseAudit?: boolean;
    /** Maximum file size in bytes (default: 10MB) */
    maxFileSize?: number;
}
export interface IFileOperationsService {
    /**
     * Read a file securely with atomic locking
     * @param filePath - Absolute path to file
     * @param elementType - Element type for context (optional for generic files)
     * @param options - Read options
     */
    readFile(filePath: string, options?: FileReadOptions): Promise<string>;
    /**
     * Read an element file (wrapper around readFile with specific logging)
     * @param filePath - Absolute path to file
     * @param elementType - Element type
     * @param options - Read options
     */
    readElementFile(filePath: string, elementType: ElementType, options?: FileReadOptions): Promise<string>;
    /**
     * Write a file securely with atomic locking
     * @param filePath - Absolute path to file
     * @param content - Content to write
     * @param options - Write options
     */
    writeFile(filePath: string, content: string, options?: FileWriteOptions): Promise<void>;
    /**
     * Delete a file securely
     * @param filePath - Absolute path to file
     * @param elementType - Element type for context (optional)
     * @param options - Operation options
     */
    deleteFile(filePath: string, elementType?: ElementType, options?: FileOperationOptions): Promise<void>;
    /**
     * Create a directory if it doesn't exist
     * @param directoryPath - Absolute path to directory
     */
    createDirectory(directoryPath: string): Promise<void>;
    /**
     * List files in a directory
     * @param directoryPath - Absolute path to directory
     */
    listDirectory(directoryPath: string): Promise<string[]>;
    /**
     * List directory contents with type information
     * @param directoryPath - Absolute path to directory
     * @returns Array of entries with name and type info
     */
    listDirectoryWithTypes(directoryPath: string): Promise<Array<{
        name: string;
        isDirectory: boolean;
        isFile: boolean;
    }>>;
    /**
     * Rename/Move a file or directory
     * @param oldPath - Current absolute path
     * @param newPath - New absolute path
     */
    renameFile(oldPath: string, newPath: string): Promise<void>;
    /**
     * Check if a file or directory exists
     * @param filePath - Absolute path to check
     */
    exists(filePath: string): Promise<boolean>;
    /**
     * Get file statistics
     * @param filePath - Absolute path to the file
     * @returns File statistics
     */
    stat(filePath: string): Promise<Stats>;
    /**
     * Resolve a relative path to absolute path within a base directory
     * @param relativePath - Relative path to resolve
     * @param baseDirectory - Base directory for resolution
     */
    resolvePath(relativePath: string, baseDirectory: string): string;
    /**
     * Validate a path doesn't contain traversal attempts
     * @param filePath - Path to validate
     * @param baseDirectory - Base directory to constrain to
     */
    validatePath(filePath: string, baseDirectory: string): boolean;
    /**
     * Create a file atomically - fails if file already exists (prevents TOCTOU race conditions)
     * @param filePath - Absolute path to file
     * @param content - Content to write
     * @param options - Write options
     * @returns true if created, false if file already existed
     */
    createFileExclusive(filePath: string, content: string, options?: FileWriteOptions): Promise<boolean>;
    /**
     * Copy a file from source to destination
     * @param sourcePath - Absolute path to source file
     * @param destPath - Absolute path to destination
     * @param options - Operation options
     */
    copyFile(sourcePath: string, destPath: string, options?: FileOperationOptions): Promise<void>;
    /**
     * Change file permissions
     * @param filePath - Absolute path to file
     * @param mode - Permission mode (e.g., 0o644)
     * @param options - Operation options
     */
    chmod(filePath: string, mode: number, options?: FileOperationOptions): Promise<void>;
    /**
     * Append content to a file
     * @param filePath - Absolute path to file
     * @param content - Content to append
     * @param options - Write options
     */
    appendFile(filePath: string, content: string, options?: FileWriteOptions): Promise<void>;
}
export declare class FileOperationsService implements IFileOperationsService {
    private fileLockManager;
    private readonly defaultMaxFileSize;
    private config;
    constructor(fileLockManager: FileLockManager, config?: FileOperationsConfig);
    readFile(filePath: string, options?: FileReadOptions): Promise<string>;
    readElementFile(filePath: string, elementType: ElementType, options?: FileReadOptions): Promise<string>;
    writeFile(filePath: string, content: string, options?: FileWriteOptions): Promise<void>;
    deleteFile(filePath: string, elementType?: ElementType, options?: FileOperationOptions): Promise<void>;
    createDirectory(directoryPath: string): Promise<void>;
    exists(filePath: string): Promise<boolean>;
    /**
     * Get file statistics
     * @param filePath - Absolute path to the file
     * @returns File statistics
     */
    stat(filePath: string): Promise<Stats>;
    listDirectory(directoryPath: string): Promise<string[]>;
    listDirectoryWithTypes(directoryPath: string): Promise<Array<{
        name: string;
        isDirectory: boolean;
        isFile: boolean;
    }>>;
    renameFile(oldPath: string, newPath: string): Promise<void>;
    resolvePath(relativePath: string, baseDirectory: string): string;
    validatePath(filePath: string, baseDirectory: string): boolean;
    createFileExclusive(filePath: string, content: string, options?: FileWriteOptions): Promise<boolean>;
    copyFile(sourcePath: string, destPath: string, options?: FileOperationOptions): Promise<void>;
    chmod(filePath: string, mode: number, options?: FileOperationOptions): Promise<void>;
    appendFile(filePath: string, content: string, options?: FileWriteOptions): Promise<void>;
}
//# sourceMappingURL=FileOperationsService.d.ts.map