import { AppendBlockChildrenRequest, CreateCommentRequest, CreatePageRequest, DatabaseQueryRequest, NotionBlock, NotionBlockChildren, NotionColor, NotionComment, NotionCommentResults, NotionConfig, NotionDatabase, NotionDatabaseQueryResults, NotionPage, NotionRichText, UpdatePageRequest } from '../types/notion.js';
import { ConversionOptions, ConversionResult } from '../types/markdown.js';
import { EnhancedSearchResult, SearchStatistics } from '../types/search.js';
import { NotionBlockData } from '../utils/notion-blocks.js';
export declare class NotionService {
    private config;
    private baseUrl;
    private propertyTypeCache;
    constructor(config: NotionConfig);
    private analyzeSearchMatch;
    private getPropertyType;
    private setPropertyValue;
    private makeRequest;
    getDatabase(databaseId: string): Promise<NotionDatabase>;
    queryDatabase(request: DatabaseQueryRequest): Promise<NotionDatabaseQueryResults>;
    updateDatabase(databaseId: string, updateData: unknown): Promise<NotionDatabase>;
    getPage(pageId: string): Promise<NotionPage>;
    createPage(request: CreatePageRequest): Promise<NotionPage>;
    updatePage(pageId: string, request: UpdatePageRequest): Promise<NotionPage>;
    archivePage(pageId: string): Promise<NotionPage>;
    getBlockChildren(blockId: string, startCursor?: string): Promise<NotionBlockChildren>;
    appendBlockChildren(blockId: string, request: AppendBlockChildrenRequest): Promise<NotionBlockChildren>;
    /**
     * Append blocks to a page/block with automatic chunking for 100-block limit
     */
    appendBlockChildrenChunked(blockId: string, blocks: NotionBlockData[], maxBlocksPerRequest?: number): Promise<NotionBlockChildren[]>;
    updateBlock(blockId: string, updateData: unknown): Promise<NotionBlock>;
    deleteBlock(blockId: string): Promise<NotionBlock>;
    getComments(pageId: string): Promise<NotionCommentResults>;
    createComment(request: CreateCommentRequest): Promise<NotionComment>;
    private getAllBlocksRecursively;
    getAllBlocksRecursivelyParallel(blockId: string, maxConcurrency?: number): Promise<NotionBlock[]>;
    createRichText(content: string, annotations?: Partial<{
        bold: boolean;
        italic: boolean;
        strikethrough: boolean;
        underline: boolean;
        code: boolean;
        color: NotionColor;
    }>, link?: string): NotionRichText;
    /**
     * Create a Notion page from markdown content
     */
    createPageFromMarkdown(databaseId: string, options: {
        markdown?: string;
        filePath?: string;
        pageTitle?: string;
        conversionOptions?: Partial<ConversionOptions>;
        metadata?: {
            category?: string;
            tags?: string[];
            description?: string;
            status?: string;
        };
    }): Promise<{
        page: NotionPage;
        conversionResult: ConversionResult;
    }>;
    /**
 * Export a Notion page to markdown
 */
    exportPageToMarkdown(pageId: string, options?: Partial<ConversionOptions>): Promise<{
        markdown: string;
        page: NotionPage;
        conversionResult: ConversionResult;
    }>;
    /**
     * Update page metadata (properties only)
     */
    updatePageMetadata(pageId: string, metadata: {
        category?: string;
        tags?: string[];
        description?: string;
        status?: string;
    }): Promise<NotionPage>;
    /**
 * Update page content (create new page, keep old page)
 */
    updatePageContent(pageId: string, options: {
        markdown?: string;
        filePath?: string;
        conversionOptions?: Partial<ConversionOptions>;
    }): Promise<{
        conversionResult: ConversionResult;
        newPageId: string;
    }>;
    /**
     * List/query database pages with advanced filtering and sorting
     */
    listDatabasePages(databaseId: string, options?: {
        limit?: number;
        search?: string;
        category?: string;
        tags?: string[];
        status?: string;
        sortBy?: 'title' | 'last_edited' | 'created' | 'category' | 'status';
        sortOrder?: 'ascending' | 'descending';
        startCursor?: string;
        searchMode?: 'tags' | 'full-text' | 'combined';
    }): Promise<NotionDatabaseQueryResults>;
    /**
     * Enhanced version of listDatabasePages that includes search match metadata
     */
    searchPagesWithMetadata(databaseId: string, options?: {
        limit?: number;
        search?: string;
        category?: string;
        tags?: string[];
        status?: string;
        sortBy?: 'title' | 'last_edited' | 'created' | 'category' | 'status';
        sortOrder?: 'ascending' | 'descending';
        startCursor?: string;
        searchMode?: 'tags' | 'full-text' | 'combined';
    }): Promise<{
        results: EnhancedSearchResult[];
        statistics: SearchStatistics;
        hasMore: boolean;
        nextCursor?: string;
    }>;
    /**
     * Find the title property name in a database
     */
    private getTitlePropertyName;
    /**
     * Ensure database has required properties for metadata
     */
    private ensureDatabaseProperties;
}
