/**
 * Database Query Builder Utility
 *
 * Centralizes MongoDB query building logic that was duplicated across
 * 8 different database operations in the codebase.
 *
 * This utility extracts common patterns:
 * - IMO No filtering (5 identical instances)
 * - Date range filtering (5 identical instances)
 * - Field projections (5 different projection patterns)
 * - Data transformation and sorting (5 similar instances)
 * - Component queries and CRUD operations
 */
export interface DateRangeFilter {
    startDate?: string;
    endDate?: string;
}
export interface MongoQuery {
    [key: string]: any;
}
export interface ProjectionFields {
    [key: string]: 1 | 0;
}
export type DataType = 'fuel' | 'freshwater' | 'mecc' | 'cylinder' | 'aecc';
/**
 * Builds the basic IMO query filter with input sanitization
 * @param imo - The IMO number to filter by
 * @returns MongoDB query object for IMO filtering
 */
export declare function buildImoQuery(imo: number): MongoQuery;
/**
 * Adds date range filtering to an existing query with input validation
 * @param query - The existing query object
 * @param dateRange - Optional start and end dates
 * @returns Updated query with date filtering
 */
export declare function addDateRangeFilter(query: MongoQuery, dateRange?: DateRangeFilter): MongoQuery;
/**
 * Builds a complete vessel data query with IMO and optional date filtering
 * @param imo - The IMO number to filter by
 * @param dateRange - Optional date range filter
 * @returns Complete MongoDB query object
 */
export declare function buildVesselDataQuery(imo: number, dateRange?: DateRangeFilter): MongoQuery;
/**
 * Gets the field projection for different data types
 * @param dataType - The type of data being queried
 * @returns MongoDB projection object
 */
export declare function getProjectionByType(dataType: DataType): ProjectionFields;
/**
 * Transforms MongoDB documents to flattened structure
 * @param documents - Array of MongoDB documents
 * @param dataType - The type of data to transform
 * @returns Array of transformed documents
 */
export declare function transformDocuments(documents: any[], dataType: DataType): any[];
/**
 * Sorts documents by Report Date (newest first)
 * @param documents - Array of documents to sort
 * @returns Sorted array
 */
export declare function sortByReportDate(documents: any[]): any[];
/**
 * Builds component query patterns for component data lookup with input sanitization
 * @param imo - The IMO number (sanitized)
 * @param questionNumber - Optional question number for specific queries (sanitized)
 * @returns Object with different component query patterns
 */
export declare function buildComponentQueries(imo: string, questionNumber?: string): {
    imoQuery: {
        componentNo: {
            $regex: string;
            $options: string;
        };
    };
    specificQuery: (componentNo: string) => {
        componentNo: string;
    };
    similarQuery: {
        componentNo: {
            $regex: string;
            $options: string;
        };
    } | null;
};
/**
 * Creates ObjectId filter for MongoDB updates with validation
 * @param id - The string ID to convert to ObjectId
 * @returns MongoDB filter object
 */
export declare function createObjectIdFilter(id: string): MongoQuery;
/**
 * Sanitizes a complete MongoDB query object
 * @param query - The query object to sanitize
 * @returns Sanitized query object
 */
export declare function sanitizeMongoQuery(query: any): MongoQuery;
/**
 * Builds a safe search query for text fields
 * @param searchText - The text to search for
 * @param fields - Array of field names to search in
 * @returns Safe MongoDB query object
 */
export declare function buildSafeSearchQuery(searchText: string, fields: string[]): MongoQuery;
/**
 * Executes a complete vessel data query with standardized processing
 * @param collection - MongoDB collection instance
 * @param imo - IMO number to query
 * @param dataType - Type of data to retrieve
 * @param dateRange - Optional date range filter
 * @returns Processed query results
 */
export declare function executeVesselDataQuery(collection: any, imo: number, dataType: DataType, dateRange?: DateRangeFilter): Promise<any[]>;
