import { BaseWebSocketClient } from './base-ws-client';
/**
 * Опции для клиента файловой системы
 */
export interface FileSystemWsClientOptions {
    /** Обработчик чтения файла */
    onReadFile?: (path: string) => Promise<string>;
    /** Обработчик получения списка файлов */
    onListFiles?: (directory: string, options?: {
        includePatterns?: string[];
        excludePatterns?: string[];
    }) => Promise<FileInfo[]>;
    /** Обработчик начала отслеживания файлов */
    onWatchStart?: (patterns: string[]) => Promise<boolean>;
}
/**
 * Интерфейс информации о файле
 */
export interface FileInfo {
    /** Абсолютный путь к файлу */
    path: string;
    /** Относительный путь в рамках проекта */
    relativePath: string;
    /** Расширение файла */
    extension: string;
    /** Размер файла в байтах */
    size: number;
    /** Флаг директории */
    isDirectory: boolean;
}
/**
 * Клиент WebSocket для работы с файловой системой
 */
export declare class FileSystemWsClient extends BaseWebSocketClient {
    private sessionId;
    private projectId;
    private readonly SDK_VERSION;
    onReadFile: (path: string) => Promise<string>;
    onListFiles: (directory: string, options?: {
        includePatterns?: string[];
        excludePatterns?: string[];
    }) => Promise<FileInfo[]>;
    onWatchStart: (patterns: string[]) => Promise<boolean>;
    /**
     * Создает новый клиент для работы с файловой системой
     * @param baseURL Базовый URL API
     * @param options Опции клиента
     */
    constructor(baseURL: string, options?: FileSystemWsClientOptions);
    /**
     * Подключение к серверу и инициализация сессии
     * @param {string | Record<string, any>} projectIdOrParams Идентификатор проекта или параметры подключения
     * @returns Promise<boolean> Успешность подключения
     */
    connect(projectIdOrParams?: string | Record<string, any>): Promise<boolean>;
    /**
     * Подключение к проекту - удобный метод для использования в приложении
     * @param projectId ID проекта
     * @returns Promise<boolean> Успешность подключения
     */
    connectToProject(projectId: string): Promise<boolean>;
    /**
     * Настройка обработчиков событий
     */
    private setupHandlers;
    /**
     * Уведомляет сервер об изменении файла
     * @param path Путь к файлу
     * @param changeType Тип изменения
     */
    notifyFileChanged(path: string, changeType?: 'created' | 'modified' | 'deleted'): boolean;
}
/**
 * Пример использования клиента файловой системы в VS Code расширении:
 *
 * ```typescript
 * import * as vscode from 'vscode';
 * import { FileSystemWsClient } from 'solver-sdk';
 *
 * export function activate(context: vscode.ExtensionContext) {
 *   // Создание клиента файловой системы
 *   const fsClient = new FileSystemWsClient('wss://your-backend-url.com', {
 *     // Обработчик чтения файла
 *     onReadFile: async (path) => {
 *       try {
 *         const uri = vscode.Uri.file(path);
 *         const content = await vscode.workspace.fs.readFile(uri);
 *         return new TextDecoder().decode(content);
 *       } catch (error) {
 *         throw new Error(`Ошибка чтения файла: ${error.message}`);
 *       }
 *     },
 *
 *     // Обработчик получения списка файлов
 *     onListFiles: async (directory, options) => {
 *       try {
 *         // Получаем корневую директорию рабочего пространства
 *         const rootPath = vscode.workspace.workspaceFolders?.[0]?.uri.fsPath;
 *         if (!rootPath) throw new Error('Не найдено рабочее пространство');
 *
 *         // Формируем паттерн для поиска файлов
 *         const pattern = new vscode.RelativePattern(
 *           rootPath,
 *           options?.includePatterns?.[0] || '**'
 *         );
 *
 *         // Находим файлы по паттерну
 *         const files = await vscode.workspace.findFiles(pattern,
 *           options?.excludePatterns?.join('|')
 *         );
 *
 *         // Преобразуем результаты в нужный формат
 *         return files.map(uri => {
 *           const relativePath = vscode.workspace.asRelativePath(uri);
 *           const stats = fs.statSync(uri.fsPath);
 *
 *           return {
 *             path: uri.fsPath,
 *             relativePath,
 *             extension: uri.fsPath.split('.').pop() || '',
 *             size: stats.size,
 *             isDirectory: stats.isDirectory()
 *           };
 *         });
 *       } catch (error) {
 *         throw new Error(`Ошибка получения списка файлов: ${error.message}`);
 *       }
 *     },
 *
 *     // Обработчик отслеживания файлов
 *     onWatchStart: async (patterns) => {
 *       try {
 *         // Создаем наблюдателей за файлами
 *         const watchers = patterns.map(pattern => {
 *           const watcher = vscode.workspace.createFileSystemWatcher(
 *             new vscode.RelativePattern(
 *               vscode.workspace.workspaceFolders?.[0]?.uri.fsPath || '',
 *               pattern
 *             )
 *           );
 *
 *           // Обработчик изменения файла
 *           watcher.onDidChange(uri => {
 *             const relativePath = vscode.workspace.asRelativePath(uri);
 *             fsClient.notifyFileChanged(relativePath, 'modified');
 *           });
 *
 *           // Обработчик создания файла
 *           watcher.onDidCreate(uri => {
 *             const relativePath = vscode.workspace.asRelativePath(uri);
 *             fsClient.notifyFileChanged(relativePath, 'created');
 *           });
 *
 *           // Обработчик удаления файла
 *           watcher.onDidDelete(uri => {
 *             const relativePath = vscode.workspace.asRelativePath(uri);
 *             fsClient.notifyFileChanged(relativePath, 'deleted');
 *           });
 *
 *           return watcher;
 *         });
 *
 *         // Добавляем наблюдателей в контекст расширения для правильной очистки
 *         watchers.forEach(watcher => {
 *           context.subscriptions.push(watcher);
 *         });
 *
 *         return true;
 *       } catch (error) {
 *         console.error('Ошибка при настройке отслеживания файлов:', error);
 *         return false;
 *       }
 *     }
 *   });
 *
 *   // Подключаемся к проекту
 *   vscode.commands.registerCommand('extension.connectToProject', async () => {
 *     // Запрашиваем ID проекта у пользователя
 *     const projectId = await vscode.window.showInputBox({
 *       prompt: 'Введите ID проекта для подключения'
 *     });
 *
 *     if (!projectId) return;
 *
 *     try {
 *       // Устанавливаем соединение
 *       const connected = await fsClient.connectToProject(projectId);
 *
 *       if (connected) {
 *         vscode.window.showInformationMessage(`Успешное подключение к проекту ${projectId}`);
 *       } else {
 *         vscode.window.showErrorMessage('Ошибка подключения к проекту');
 *       }
 *     } catch (error) {
 *       vscode.window.showErrorMessage(`Ошибка: ${error.message}`);
 *     }
 *   });
 * }
 * ```
 */ 
//# sourceMappingURL=filesystem-ws-client.d.ts.map