import { DocumentType } from "../../../domain/entities/JsonDocument.js";
import type { IJsonDocumentRepository } from "../../../domain/repositories/IJsonDocumentRepository.js";
import type { IUseCase } from "../../interfaces/IUseCase.js";
/**
 * Input data for search JSON documents use case
 */
export interface SearchJsonDocumentsInput {
    /**
     * Branch name (required for branch documents, omit for global)
     */
    branchName?: string;
    /**
     * Tags to search for (optional)
     */
    tags?: string[];
    /**
     * Document type to search for (optional)
     */
    documentType?: DocumentType;
    /**
     * Whether all tags must match (default: false)
     */
    matchAllTags?: boolean;
}
/**
 * Output data for search JSON documents use case
 */
export interface SearchJsonDocumentsOutput {
    /**
     * Found documents
     */
    documents: Array<{
        /**
         * Document ID
         */
        id: string;
        /**
         * Document path
         */
        path: string;
        /**
         * Document title
         */
        title: string;
        /**
         * Document type
         */
        documentType: DocumentType;
        /**
         * Document tags
         */
        tags: string[];
        /**
         * Document content
         */
        content: Record<string, unknown>;
        /**
         * Last modified date (ISO string)
         */
        lastModified: string;
        /**
         * Created date (ISO string)
         */
        createdAt: string;
        /**
         * Document version
         */
        version: number;
    }>;
    /**
     * Search metadata
     */
    searchInfo: {
        /**
         * Number of documents found
         */
        count: number;
        /**
         * Location of search (branch name or "global")
         */
        searchLocation: string;
        /**
         * Tags used for search (if applicable)
         */
        searchedTags?: string[];
        /**
         * Document type used for search (if applicable)
         */
        searchedDocumentType?: string;
        /**
         * Whether all tags matched (if applicable)
         */
        matchedAllTags?: boolean;
    };
}
/**
 * Use case for searching JSON documents
 */
export declare class SearchJsonDocumentsUseCase implements IUseCase<SearchJsonDocumentsInput, SearchJsonDocumentsOutput> {
    private readonly jsonRepository;
    private readonly globalRepository?;
    /**
     * Constructor
     * @param jsonRepository JSON document repository
     * @param globalRepository Global JSON document repository (optional)
     */
    constructor(jsonRepository: IJsonDocumentRepository, globalRepository?: IJsonDocumentRepository | undefined);
    /**
     * Execute the use case
     * @param input Input data
     * @returns Promise resolving to output data
     */
    execute(input: SearchJsonDocumentsInput): Promise<SearchJsonDocumentsOutput>;
}
//# sourceMappingURL=SearchJsonDocumentsUseCase.d.ts.map