import { DocumentType } from "../../../domain/entities/JsonDocument.js";
import type { IJsonDocumentRepository } from "../../../domain/repositories/IJsonDocumentRepository.js";
import type { IIndexService } from "../../../infrastructure/index/index.js";
import type { IUseCase } from "../../interfaces/IUseCase.js";
/**
 * Input data for write JSON document use case
 */
export interface WriteJsonDocumentInput {
    /**
     * Branch name (required for branch documents, omit for global)
     */
    branchName?: string;
    /**
     * Document data
     */
    document: {
        /**
         * Document ID (optional, will be generated if not provided)
         */
        id?: string;
        /**
         * Document path (required)
         */
        path: string;
        /**
         * Document title
         */
        title: string;
        /**
         * Document type (required)
         */
        documentType: DocumentType;
        /**
         * Document tags (optional)
         */
        tags?: string[];
        /**
         * Document content (required)
         */
        content: Record<string, unknown>;
    };
}
/**
 * Output data for write JSON document use case
 */
export interface WriteJsonDocumentOutput {
    /**
     * Document data after saving
     */
    document: {
        /**
         * Document ID
         */
        id: string;
        /**
         * Document path
         */
        path: string;
        /**
         * Document title
         */
        title: string;
        /**
         * Document type
         */
        documentType: string;
        /**
         * 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;
    };
    /**
     * Flag indicating if this was a new document (true) or an update (false)
     */
    isNew: boolean;
    /**
     * Location where document was saved (branch name or "global")
     */
    location: string;
}
/**
 * Use case for writing (creating or updating) a JSON document
 */
export declare class WriteJsonDocumentUseCase implements IUseCase<WriteJsonDocumentInput, WriteJsonDocumentOutput> {
    private readonly jsonRepository;
    private readonly indexService;
    private readonly globalRepository?;
    /**
     * Constructor
     * @param jsonRepository JSON document repository
     * @param indexService Index service for updating indexes after write
     * @param globalRepository Global JSON document repository (optional)
     */
    constructor(jsonRepository: IJsonDocumentRepository, indexService: IIndexService, globalRepository?: IJsonDocumentRepository | undefined);
    /**
     * Execute the use case
     * @param input Input data
     * @returns Promise resolving to output data
     */
    execute(input: WriteJsonDocumentInput): Promise<WriteJsonDocumentOutput>;
    /**
     * Validate the input data
     * @param input Input data to validate
     * @throws ApplicationError if validation fails
     */
    private validateInput;
}
//# sourceMappingURL=WriteJsonDocumentUseCase.d.ts.map