import { BranchInfo } from '../../domain/entities/BranchInfo.js';
import { DocumentId } from '../../domain/entities/DocumentId.js';
import { DocumentPath } from '../../domain/entities/DocumentPath.js';
import { JsonDocument, DocumentType } from '../../domain/entities/JsonDocument.js';
import { Tag } from '../../domain/entities/Tag.js';
import { IFileSystemService } from '../storage/interfaces/IFileSystemService.js';
import { IIndexService } from './interfaces/IIndexService.js';
import { DocumentReference } from '@memory-bank/schemas';
/**
 * Implementation of the document index service
 * Provides efficient lookup capabilities for documents using in-memory indices
 * with file system persistence
 */
export declare class IndexService implements IIndexService {
    private readonly fileSystemService;
    private readonly rootPath;
    private indices;
    /**
     * Create a new IndexService
     * @param fileSystemService File system service for file operations
     * @param rootPath Root path for storing index files
     */
    constructor(fileSystemService: IFileSystemService, rootPath: string);
    /**
     * Initialize the index for a branch
     * @param branchInfo Branch information
     */
    initializeIndex(branchInfo: BranchInfo): Promise<void>;
    /**
     * Build the index from a collection of documents
     * @param branchInfo Branch information
     * @param documents Documents to index
     */
    buildIndex(branchInfo: BranchInfo, documents: JsonDocument[]): Promise<void>;
    /**
     * Add a document to the index
     * @param branchInfo Branch information
     * @param document Document to add
     */
    addToIndex(branchInfo: BranchInfo, document: JsonDocument): Promise<void>;
    /**
     * Remove a document from the index
     * @param branchInfo Branch information
     * @param document Document or document ID or path to remove
     */
    removeFromIndex(branchInfo: BranchInfo, document: JsonDocument | DocumentId | DocumentPath): Promise<void>;
    /**
     * Find document reference by ID
     * @param branchInfo Branch information
     * @param id Document ID
     * @returns Document reference if found, null otherwise
     */
    findById(branchInfo: BranchInfo, id: DocumentId): Promise<DocumentReference | null>;
    /**
     * Convert internal document reference to the schema DocumentReference type
     * @param internal Internal document reference
     * @returns Schema-compatible document reference
     */
    private convertToDocumentReference;
    /**
     * Find document reference by path
     * @param branchInfo Branch information
     * @param path Document path
     * @returns Document reference if found, null otherwise
     */
    findByPath(branchInfo: BranchInfo, path: DocumentPath): Promise<DocumentReference | null>;
    /**
     * Find document references by tags
     * @param branchInfo Branch information
     * @param tags Tags to search for
     * @param matchAll If true, documents must have all tags; if false, any tag is sufficient
     * @returns Array of matching document references
     */
    findByTags(params: {
        branchInfo: BranchInfo;
        tags: Tag[];
        matchAll?: boolean;
    }): Promise<DocumentReference[]>;
    /**
     * Find document references by document type
     * @param branchInfo Branch information
     * @param documentType Document type to search for
     * @returns Array of matching document references
     */
    findByType(branchInfo: BranchInfo, documentType: DocumentType): Promise<DocumentReference[]>;
    /**
     * List all document references
     * @param branchInfo Branch information
     * @returns Array of all document references
     */
    listAll(branchInfo: BranchInfo): Promise<DocumentReference[]>;
    /**
     * Save the index to persistent storage
     * @param branchInfo Branch information
     */
    saveIndex(branchInfo: BranchInfo): Promise<void>;
    /**
     * Load the index from persistent storage
     * @param branchInfo Branch information
     */
    loadIndex(branchInfo: BranchInfo): Promise<void>;
    /**
     * Get the index file path for a branch
     * @param branchInfo Branch information
     * @returns Absolute file path to the index file
     */
    private getIndexFilePath;
    /**
     * Get an existing index or create a new one if it doesn't exist
     * @param branchInfo Branch information
     * @returns Document index
     */
    private getOrCreateIndex;
    /**
     * Add a document to an index
     * @param index Document index to update
     * @param document Document to add
     */
    private addDocumentToIndex;
}
//# sourceMappingURL=IndexService.d.ts.map