import { z } from 'zod';
import { MailService } from './mail.js';
import { EmailMessage } from '../types/email.js';
export interface SearchQuery {
    text: string;
    from?: string[];
    to?: string[];
    subject?: string;
    hasAttachments?: boolean;
    dateRange?: {
        start?: Date;
        end?: Date;
    };
    folders?: string[];
    categories?: string[];
    isRead?: boolean;
    importance?: 'low' | 'normal' | 'high';
    limit?: number;
    requireAllTerms?: boolean;
    includeAliases?: boolean;
    semanticSearch?: boolean;
}
export interface SearchOptions {
    accountId?: string;
    limit?: number;
    offset?: number;
    orderBy?: 'receivedDateTime' | 'subject' | 'from' | 'importance' | 'relevance';
    orderDirection?: 'asc' | 'desc';
    includeBody?: boolean;
    includeSentItems?: boolean;
    exactMatch?: boolean;
    enableSemanticExpansion?: boolean;
}
export interface SearchResult {
    emails: EmailMessage[];
    totalCount: number;
    hasMore: boolean;
    suggestions?: string[];
    expandedQuery?: string;
    searchStrategy?: string;
}
interface ParsedQuery {
    terms: string[];
    filters: {
        from: string[];
        to: string[];
        subject: string[];
        hasAttachments?: boolean;
        dateRange?: {
            start?: Date | string;
            end?: Date | string;
        };
    };
    originalQuery: string;
    hasOrOperator?: boolean;
    orParts?: string[];
}
export declare class UnifiedSearchService {
    private mailService;
    private aliasManager;
    constructor(mailService: MailService);
    /**
     * Parse natural language query into structured search parameters
     */
    parseQuery(query: string): ParsedQuery;
    /**
     * Expand names to known email addresses using AliasManager
     */
    expandAliases(names: string[]): string[];
    /**
     * Expand search terms with semantic concepts
     */
    expandConcepts(terms: string[], enableSemanticExpansion?: boolean): string[];
    /**
     * Build Microsoft Graph filter string
     */
    buildGraphFilter(query: ParsedQuery, options: SearchOptions): string;
    /**
     * Build Microsoft Graph search query
     */
    buildSearchQuery(terms: string[], requireAll?: boolean, enableSemanticExpansion?: boolean): string;
    /**
     * Perform unified email search with intelligent fallbacks
     */
    search(query: string | SearchQuery, options?: SearchOptions): Promise<SearchResult>;
    /**
     * Execute OR search by combining results from multiple searches
     */
    private executeOrSearch;
    /**
     * Execute search with automatic chunking to prevent token limit issues
     */
    private executeChunkedSearch;
    /**
     * Generate helpful search suggestions
     */
    private generateSearchSuggestions;
}
export declare const searchQuerySchema: z.ZodObject<{
    text: z.ZodString;
    from: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
    to: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
    subject: z.ZodOptional<z.ZodString>;
    hasAttachments: z.ZodOptional<z.ZodBoolean>;
    dateRange: z.ZodOptional<z.ZodObject<{
        start: z.ZodEffects<z.ZodOptional<z.ZodString>, Date | undefined, string | undefined>;
        end: z.ZodEffects<z.ZodOptional<z.ZodString>, Date | undefined, string | undefined>;
    }, "strip", z.ZodTypeAny, {
        start?: Date | undefined;
        end?: Date | undefined;
    }, {
        start?: string | undefined;
        end?: string | undefined;
    }>>;
    folders: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
    categories: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
    isRead: z.ZodOptional<z.ZodBoolean>;
    importance: z.ZodOptional<z.ZodEnum<["low", "normal", "high"]>>;
    limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
    requireAllTerms: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
    includeAliases: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
    semanticSearch: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
}, "strip", z.ZodTypeAny, {
    text: string;
    limit: number;
    requireAllTerms: boolean;
    includeAliases: boolean;
    semanticSearch: boolean;
    subject?: string | undefined;
    from?: string[] | undefined;
    isRead?: boolean | undefined;
    hasAttachments?: boolean | undefined;
    importance?: "low" | "normal" | "high" | undefined;
    categories?: string[] | undefined;
    to?: string[] | undefined;
    dateRange?: {
        start?: Date | undefined;
        end?: Date | undefined;
    } | undefined;
    folders?: string[] | undefined;
}, {
    text: string;
    subject?: string | undefined;
    from?: string[] | undefined;
    isRead?: boolean | undefined;
    hasAttachments?: boolean | undefined;
    importance?: "low" | "normal" | "high" | undefined;
    categories?: string[] | undefined;
    to?: string[] | undefined;
    limit?: number | undefined;
    dateRange?: {
        start?: string | undefined;
        end?: string | undefined;
    } | undefined;
    folders?: string[] | undefined;
    requireAllTerms?: boolean | undefined;
    includeAliases?: boolean | undefined;
    semanticSearch?: boolean | undefined;
}>;
export declare const searchOptionsSchema: z.ZodObject<{
    accountId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
    limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
    offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
    orderBy: z.ZodDefault<z.ZodOptional<z.ZodEnum<["receivedDateTime", "subject", "from", "importance", "relevance"]>>>;
    orderDirection: z.ZodDefault<z.ZodOptional<z.ZodEnum<["asc", "desc"]>>>;
    includeBody: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
    includeSentItems: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
}, "strip", z.ZodTypeAny, {
    limit: number;
    accountId: string;
    offset: number;
    orderBy: "subject" | "from" | "receivedDateTime" | "importance" | "relevance";
    orderDirection: "asc" | "desc";
    includeBody: boolean;
    includeSentItems: boolean;
}, {
    limit?: number | undefined;
    accountId?: string | undefined;
    offset?: number | undefined;
    orderBy?: "subject" | "from" | "receivedDateTime" | "importance" | "relevance" | undefined;
    orderDirection?: "asc" | "desc" | undefined;
    includeBody?: boolean | undefined;
    includeSentItems?: boolean | undefined;
}>;
export {};
//# sourceMappingURL=unifiedSearch.d.ts.map