import { HttpClient } from '../utils/http-client.js';
import { Project, IndexingResponse, FileIndexResponse, ProjectOptions, ProjectUpdateData } from '../types/index.js';
declare global {
    var solverSdkProjectCache: Record<string, string> | undefined;
}
/**
 * Константы для API путей
 */
export declare enum ApiEndpoints {
    PROJECTS = "/api/v1/projects",
    PROJECT = "/api/v1/projects/:id",
    PROJECT_INDEXING_STATUS = "/api/v1/projects/:id/indexing_status",
    PROJECT_CANCEL_INDEXING = "/api/v1/projects/:id/cancel_indexing",
    PROJECT_CLEAR_ERROR = "/api/v1/projects/:id/clear_error"
}
/**
 * API для работы с проектами
 */
export declare class ProjectsApi {
    /** HTTP клиент */
    private readonly httpClient;
    /** WebSocket клиент */
    private wsClient;
    /** Родительский SDK */
    private parentSdk;
    /**
     * Создает новый экземпляр API для работы с проектами
     * @param {HttpClient} httpClient HTTP клиент
     */
    constructor(httpClient: HttpClient);
    /**
     * Проверяет валидность идентификатора проекта
     * @param {string} projectId ID проекта
     * @throws {Error} Если ID проекта не валиден
     */
    private validateProjectId;
    /**
     * Получает список всех проектов
     * @returns {Promise<Project[]>} Список проектов
     */
    getAllProjects(): Promise<Project[]>;
    /**
     * Получает проект по ID
     * @param {string} projectId ID проекта
     * @returns {Promise<Project>} Проект
     */
    getProject(projectId: string): Promise<Project>;
    /**
     * Создает новый проект
     * @param {string} name Название проекта
     * @param {string} path Путь к проекту
     * @param {ProjectOptions} [options] Дополнительные опции проекта
     * @returns {Promise<Project>} Созданный проект
     */
    createProject(name: string, path: string, options?: ProjectOptions): Promise<Project>;
    /**
     * Обновляет проект
     * @param {string} projectId ID проекта
     * @param {Partial<ProjectUpdateData>} data Данные для обновления
     * @returns {Promise<Project>} Обновленный проект
     */
    updateProject(projectId: string, data: Partial<ProjectUpdateData>): Promise<Project>;
    /**
     * Удаляет проект
     * @param {string} projectId ID проекта
     * @returns {Promise<void>}
     */
    deleteProject(projectId: string): Promise<void>;
    /**
     * Запускает индексацию проекта
     * @param {string} projectId ID проекта
     * @param {Object} [options] Опции индексации
     * @param {string} [options.indexingMode] Режим индексации: 'full', 'incremental', 'auto'
     * @param {boolean} [options.forceFull] Принудительная полная индексация
     * @param {string[]} [options.includePatterns] Паттерны для включения файлов
     * @param {string[]} [options.excludePatterns] Паттерны для исключения файлов
     * @returns {Promise<IndexingResponse>} Информация о начатой индексации
     */
    indexProject(projectId: string, options?: {
        indexingMode?: 'full' | 'incremental' | 'auto';
        forceFull?: boolean;
        includePatterns?: string[];
        excludePatterns?: string[];
    }): Promise<IndexingResponse>;
    /**
     * Получает статус индексации проекта
     * @param {string} projectId Идентификатор проекта
     * @returns {Promise<any>} Статус индексации проекта
     */
    getIndexingStatus(projectId: string): Promise<any>;
    /**
     * Отменяет индексацию проекта
     * @param {string} projectId Идентификатор проекта
     * @returns {Promise<boolean>} Результат отмены индексации
     */
    cancelIndexing(projectId: string): Promise<boolean>;
    /**
     * Очищает ошибку индексации проекта
     * @param {string} projectId Идентификатор проекта
     * @returns {Promise<boolean>} Результат очистки ошибки
     */
    clearIndexingError(projectId: string): Promise<boolean>;
    /**
     * Обновляет индекс конкретного файла в проекте
     * @param {string} projectId ID проекта
     * @param {string} filePath Путь к файлу (относительно корня проекта)
     * @param {Object} options Опции обновления индекса
     * @param {string} [options.content] Содержимое файла (если не указано, будет прочитано с диска)
     * @param {boolean} [options.force=false] Принудительная переиндексация, даже если файл не изменился
     * @param {string} [options.language] Язык файла (если не указан, будет определен автоматически)
     * @param {boolean} [options.updateDependencies=false] Обновлять зависимости после индексации файла
     * @returns {Promise<FileIndexResponse>} Информация об обновленном индексе файла
     */
    updateFileIndex(projectId: string, filePath: string, options?: {
        content?: string;
        force?: boolean;
        language?: string;
        updateDependencies?: boolean;
    }): Promise<FileIndexResponse>;
    /**
     * Подключается к WebSocket для событий индексации
     * @returns {Promise<boolean>} Результат подключения
     */
    connectWebSocket(): Promise<boolean>;
    /**
     * Отключается от WebSocket для событий индексации
     * @returns {Promise<void>}
     */
    disconnectWebSocket(): Promise<void>;
    /**
     * Проверяет, подключен ли WebSocket
     * @returns {boolean} Состояние подключения
     */
    isWebSocketConnected(): boolean;
    /**
     * Устанавливает родительский SDK
     * @param sdk Родительский SDK
     */
    setParent(sdk: any): void;
    /**
     * Подписывается на событие через WebSocket
     * @param event Название события
     * @param callback Функция обратного вызова
     */
    on(event: string, callback: Function): void;
    /**
     * Отправляет событие через WebSocket
     * @param event Название события
     * @param data Данные для отправки
     */
    emitSocketEvent(event: string, data: any): void;
    /**
     * Отправляет событие через WebSocket с ожиданием ответа
     * @param event Имя события
     * @param data Данные для отправки
     * @param timeout Таймаут ожидания ответа
     * @returns {Promise<any>} Ответ от сервера
     */
    sendSocketEventWithResponse(event: string, data: any, timeout?: number): Promise<any>;
    /**
     * Остановить индексацию проекта через WebSocket
     * @param projectId ID проекта
     * @returns {Promise<boolean>} Результат операции
     */
    stopIndexing(projectId: string): Promise<boolean>;
    /**
     * Кэширует соответствие пути и ID проекта
     * @param path Путь к проекту
     * @param projectId ID проекта
     * @private
     */
    private cacheProjectId;
    /**
     * Получает ID проекта из кэша
     * @param path Путь к проекту
     * @returns ID проекта или null, если не найдено
     * @private
     */
    private getCachedProjectId;
    /**
     * Получает или создает проект по пути
     * @param path Путь к проекту
     * @param name Имя проекта (опционально, если не указано - будет сгенерировано из пути)
     * @returns Данные проекта
     */
    getOrCreateProject(path: string, name?: string): Promise<Project>;
    /**
     * Индексация проекта по пути
     * @param path Путь к проекту
     * @param options Опции индексации
     * @returns Информация об индексации
     */
    indexProjectByPath(path: string, options?: {
        name?: string;
        forceFull?: boolean;
        excludePatterns?: string[];
    }): Promise<{
        success: boolean;
        status: string;
        projectId: string;
    }>;
    /**
     * Создание и индексация проекта в одной операции
     * @param path Путь к проекту
     * @param options Опции создания и индексации
     * @param {string} [options.name] Имя проекта (если не указано, будет получено из пути)
     * @param {boolean} [options.forceFull=false] Принудительная полная индексация
     * @param {string} [options.indexingMode] Режим индексации: 'full', 'incremental', 'auto'
     * @param {string[]} [options.includePatterns] Паттерны для включения файлов
     * @param {string[]} [options.excludePatterns] Паттерны для исключения файлов
     * @returns Информация о созданном проекте и начатой индексации
     */
    createAndIndexProject(path: string, options?: {
        name?: string;
        forceFull?: boolean;
        indexingMode?: 'full' | 'incremental' | 'auto';
        includePatterns?: string[];
        excludePatterns?: string[];
    }): Promise<{
        projectId: string;
        indexingStatus: string;
    }>;
    /**
     * Проверяет существование проекта и создает резервную копию при необходимости
     * @param projectId ID проекта для проверки
     * @param options Опции для создания резервной копии
     * @returns Существующий проект или созданную резервную копию
     */
    ensureProjectExists(projectId: string, options?: {
        createBackup?: boolean;
        backupPath?: string;
        backupName?: string;
    }): Promise<Project>;
    /**
     * Получает или создает проект по пути с расширенными опциями
     * @param path Путь к проекту
     * @param options Дополнительные опции
     * @returns Найденный или созданный проект
     */
    getOrCreateProjectByPath(path: string, options?: {
        name?: string;
        preferExisting?: boolean;
        indexingTimeout?: number;
        maxFileSize?: number;
    }): Promise<Project>;
    /**
     * Запускает индексацию проекта (псевдоним для indexProject)
     * @param {string} projectId ID проекта
     * @param {Object} [options] Опции индексации
     * @param {string} [options.indexingMode] Режим индексации: 'full', 'incremental', 'auto'
     * @param {boolean} [options.forceFull] Принудительная полная индексация
     * @param {string[]} [options.includePatterns] Паттерны для включения файлов
     * @param {string[]} [options.excludePatterns] Паттерны для исключения файлов
     * @returns {Promise<IndexingResponse>} Информация о начатой индексации
     */
    startIndexing(projectId: string, options?: {
        indexingMode?: 'full' | 'incremental' | 'auto';
        forceFull?: boolean;
        includePatterns?: string[];
        excludePatterns?: string[];
    }): Promise<IndexingResponse>;
}
//# sourceMappingURL=projects-api.d.ts.map