import { HttpClient } from '../utils/http-client.js';
import { Project, IndexingResponse, FileIndexResponse, ProjectOptions, ProjectUpdateData } from '../types/index.js';
/**
 * Константы для 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 проекта
     * @returns {Promise<IndexingResponse>} Информация о начатой индексации
     */
    indexProject(projectId: 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] Принудительная переиндексация, даже если файл не изменился
     * @returns {Promise<FileIndexResponse>} Информация об обновленном индексе файла
     */
    updateFileIndex(projectId: string, filePath: string, options?: {
        content?: string;
        force?: 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>;
}
//# sourceMappingURL=projects-api.d.ts.map