import { IUseCase } from '../../interfaces/IUseCase.js';
import { DocumentDTO } from '../../dtos/DocumentDTO.js';
import { DocumentRepositorySelector } from '../../services/DocumentRepositorySelector.js';
import { DocumentWriterService } from '../../services/DocumentWriterService.js';
/**
 * Input data for write document use case
 */
export interface WriteDocumentInput {
    /**
     * Scope of the memory bank ('branch' or 'global')
     */
    scope: 'branch' | 'global';
    /**
     * Branch name (required for branch scope in non-project mode)
     */
    branch?: string;
    /**
     * Document path
     */
    path: string;
    /**
     * Path to the docs directory (optional in project mode)
     */
    docs?: string;
    /**
     * Document content (mutually exclusive with patches)
     */
    content?: string | Record<string, unknown>;
    /**
     * JSON Patch operations (mutually exclusive with content)
     */
    patches?: any[];
    /**
     * Document tags
     */
    tags?: string[];
    /**
     * If true, return the document content in the response
     */
    returnContent?: boolean;
}
/**
 * Output data for write document use case
 */
export interface WriteDocumentOutput {
    /**
     * Document data after write.
     * Content and tags are included only if returnContent was true in the input.
     */
    document: Omit<DocumentDTO, 'content' | 'tags'> & {
        content?: string;
        tags?: string[];
    };
}
/**
 * Use case for writing a document to either branch or global memory bank
 */
export declare class WriteDocumentUseCase implements IUseCase<WriteDocumentInput, WriteDocumentOutput> {
    private readonly repositorySelector;
    private readonly documentWriterService;
    private readonly useCaseLogger;
    /**
     * Constructor
     * @param repositorySelector Service to select appropriate repository based on scope
     * @param documentWriterService Service for document writing and patching
     */
    constructor(repositorySelector: DocumentRepositorySelector, documentWriterService: DocumentWriterService);
    /**
     * Execute the use case
     * @param input Input data
     * @returns Promise resolving to output data
     */
    execute(input: WriteDocumentInput): Promise<WriteDocumentOutput>;
    /**
     * Validates the input parameters
     * @param input The input parameters to validate
     * @throws ApplicationError if input is invalid
     */
    private validateInput;
}
//# sourceMappingURL=WriteDocumentUseCase.d.ts.map