import { Email } from '../types.js';
export interface QueryOptions {
    search?: string;
    filter?: string;
    folder?: string;
    from?: string;
    to?: string;
    subject?: string;
    hasAttachments?: boolean;
    isRead?: boolean;
    dateRange?: {
        start?: string;
        end?: string;
    };
    limit?: number;
    skip?: number;
    orderBy?: string;
    includeBody?: boolean;
}
export interface QueryStrategy {
    method: 'search' | 'filter' | 'hybrid';
    query: string;
    fallback?: QueryStrategy;
    reason?: string;
}
export declare class SmartQueryBuilder {
    private userEmail;
    private mailService;
    constructor(userEmail: string);
    /**
     * Analyzes the query options and determines the best strategy
     */
    analyzeQuery(options: QueryOptions): QueryStrategy;
    /**
     * Executes a query with automatic fallback handling
     */
    executeQuery(options: QueryOptions): Promise<{
        emails: Email[];
        strategy: string;
        warnings?: string[];
    }>;
    private executeQueryStrategy;
    private assessFilterComplexity;
    private simplifyFilter;
    private extractSearchTermsFromFilter;
    private buildStructuredFilter;
    private buildSimplifiedFilter;
    private extractSearchableTerms;
    private isRecoverableError;
    private needsPostFiltering;
    private applyPostFilters;
    private getSelectFields;
}
//# sourceMappingURL=queryBuilder.d.ts.map