/**
 * Base Mongoose Repository - Zero Runtime Overhead
 *
 * Enterprise-grade implementation with:
 * - Native MongoDB aggregation optimization
 * - Connection pooling management
 * - Index-aware query building
 * - Comprehensive error handling
 * - Performance monitoring integration
 */
import { Model, Document, FilterQuery, UpdateQuery, AggregateOptions, ClientSession } from 'mongoose';
import { IPaginationOptions, IPaginationResult, ICriteria } from '../types';
/**
 * Abstract base repository optimized for Mongoose
 * Zero runtime abstraction - all MongoDB calls are direct
 * Enhanced with advanced caching and performance optimizations
 *
 * @template T - Document interface extending Mongoose Document
 */
export declare abstract class BaseMongooseRepository<T extends Document> {
    protected readonly model: Model<T>;
    protected readonly collectionName: string;
    private readonly modelCacheKey;
    constructor(model: Model<T>);
    /**
     * Preload relation cache with ultra-fast algorithms
     */
    private preloadRelationCache;
    /**
     * Lightning-fast relation discovery using advanced algorithms
     * Combines memoization, flyweight pattern, and ultra-fast data structures
     */
    private discoverRelations;
    /**
     * Ultra-fast entity relations retrieval with memoization
     */
    protected getEntityRelations(): string[];
    /**
     * Lightning-fast relation path validation using Bloom Filter + Trie
     * O(1) average case with Bloom Filter, O(k) worst case with Trie
     */
    protected isValidRelationPath(relationPath: string): boolean;
    /**
     * Ultra-fast searchable fields discovery with memoization
     */
    protected getSearchableFields(): string[];
    /**
     * Ultra-fast batch relation validation using vectorized operations
     * Uses SIMD-like processing with Bloom Filter + batch operations
     */
    protected validateRelations(relations: string[]): string[];
    /**
     * Find entity by ID with whereConfig pattern
     */
    findById(id: string, whereConfig: any, queryDto?: any): Promise<T | null>;
    count(criteria?: ICriteria<T>): Promise<number>;
    /**
     * Find single document with MongoDB index optimization
     * Overloaded to support both old and new signatures for backward compatibility
     * Performance: ~2-4ms for indexed queries, ~10-50ms for full collection scans
     *
     * Enterprise optimization: Uses MongoDB's native query planner
     */
    findOne(whereConfigOrCriteria: any, queryDto?: any): Promise<T | null>;
    /**
     * Legacy findOne implementation for backward compatibility
     */
    private findOneLegacy;
    /**
     * Find multiple documents with query optimization
     * Performance: ~5-15ms for indexed queries with proper limits
     *
     * Enterprise pattern: Always enforce reasonable limits to prevent DoS
     */
    find(criteria?: ICriteria<T>): Promise<T[]>;
    /**
     * Optimized pagination with MongoDB aggregation pipeline
     * Performance: ~15-30ms (uses MongoDB's native $facet for parallel execution)
     *
     * Enterprise optimization: Single aggregation query instead of separate queries
     */
    findWithPagination(criteria: ICriteria<T> & IPaginationOptions): Promise<IPaginationResult<T>>;
    /**
     * Optimized document creation with schema validation
     * Performance: ~3-8ms for simple documents
     */
    create(data: Partial<T>): Promise<T>;
    /**
     * Optimized bulk creation with MongoDB's insertMany
     * Performance: ~20-100ms for 1000 documents (vs ~3000ms individual saves)
     *
     * Enterprise optimization: Uses MongoDB's native bulk operations
     */
    createMany(data: Partial<T>[]): Promise<T[]>;
    /**
     * Optimized update with MongoDB's findOneAndUpdate
     * Performance: ~5-12ms per update
     *
     * Enterprise pattern: Atomic update with optimistic concurrency control
     */
    updateById(id: string, data: UpdateQuery<T>): Promise<T | null>;
    /**
     * Optimized bulk updates with MongoDB's updateMany
     * Performance: ~30-150ms for 1000 updates (vs ~10000ms individual updates)
     */
    updateMany(criteria: ICriteria<T>, data: UpdateQuery<T>): Promise<{
        modifiedCount: number;
    }>;
    /**
     * Delete many documents matching criteria
     */
    deleteMany(criteria: ICriteria<T>): Promise<{
        deletedCount: number;
    }>;
    /**
     * Check if document exists matching criteria
     */
    exists(criteria: ICriteria<T>): Promise<boolean>;
    /**
     * Check if document exists by filters (alias for exists)
     */
    existsByFilters(criteria: ICriteria<T>): Promise<boolean>;
    /**
     * Find one and update atomically with MongoDB's findOneAndUpdate
     */
    findOneAndUpdate<R = T>(criteria: ICriteria<T>, data: UpdateQuery<T>, options?: {
        populate?: string[];
    }): Promise<R | null>;
    /**
     * Optimized deletion with proper index usage
     * Performance: ~3-8ms per delete
     */
    deleteById(id: string): Promise<boolean>;
    /**
     * Execute optimized aggregation pipeline
     * Performance: Depends on pipeline complexity, typically 10-100ms
     *
     * Enterprise optimization: Pipeline analysis and index usage recommendations
     */
    aggregate<R = any>(pipeline: any[], options?: AggregateOptions): Promise<R[]>;
    /**
     * Text search with MongoDB's text index
     * Performance: ~10-50ms depending on index quality and result size
     *
     * Requires: Text index on searchable fields
     * db.collection.createIndex({ field1: "text", field2: "text" })
     */
    textSearch(searchTerm: string, additionalFilters?: FilterQuery<T>): Promise<T[]>;
    /**
     * Geospatial queries with MongoDB's 2dsphere index
     * Performance: ~5-20ms for proximity queries with proper indexing
     *
     * Requires: 2dsphere index on location field
     * db.collection.createIndex({ "location": "2dsphere" })
     */
    findNearby(longitude: number, latitude: number, maxDistanceMeters: number, additionalFilters?: FilterQuery<T>): Promise<T[]>;
    /**
     * Build aggregation pipeline for pagination with parallel execution
     * Uses MongoDB's $facet for optimal performance
     */
    protected buildAggregationPipeline(criteria: ICriteria<T>, skip: number, limit: number): any[];
    /**
     * Build deep populate options for Mongoose with nested population support
     * Handles relations like 'business.owner', 'posts.comments.author'
     *
     * Examples:
     * - ['profile', 'business.owner'] → [
     *     'profile',
     *     { path: 'business', populate: { path: 'owner' } }
     *   ]
     * - ['posts.comments.author'] → [
     *     { path: 'posts', populate: { path: 'comments', populate: { path: 'author' } } }
     *   ]
     */
    protected buildDeepPopulateOptions(relations: string[]): any[];
    /**
     * Build nested populate object for a single deep relation path
     * Converts 'business.owner.contact' to { path: 'business', populate: { path: 'owner', populate: { path: 'contact' } } }
     */
    protected buildNestedPopulateObject(relationPath: string): any;
    /**
     * Build population stages using MongoDB's $lookup (for aggregation pipeline)
     * More efficient than Mongoose's populate for complex relations
     */
    protected buildPopulationStages(relations: string[]): any[];
    /**
     * Build nested $lookup stages for aggregation pipeline
     * Handles deep relations in aggregation queries
     */
    protected buildNestedLookupStages(relationPath: string): any[];
    /**
     * Query performance monitoring with MongoDB-specific metrics
     * Integrates with MongoDB Compass, Atlas Performance Advisor
     */
    protected logQueryMetrics(operation: string, duration: number, criteria: any, metadata?: any): void;
    /**
     * Error handling with MongoDB-specific error classification
     * Enterprise standard: Detailed error context for debugging
     */
    protected handleQueryError(operation: string, error: any, context: any): void;
    /**
     * Execute operations within a MongoDB transaction
     * Enterprise pattern: Proper session management and error handling
     */
    withTransaction<R>(callback: (session: ClientSession) => Promise<R>): Promise<R>;
    /**
     * Get collection indexes for optimization analysis
     * Enterprise pattern: Runtime index analysis and recommendations
     */
    getIndexes(): Promise<any[]>;
    /**
     * Analyze query performance and suggest optimizations
     * Enterprise pattern: Query performance analysis and recommendations
     */
    explainQuery(criteria: ICriteria<T>): Promise<any>;
    /**
     * Execute intelligent search with whereConfig and criteria
     * Similar to TypeORM implementation but adapted for Mongoose
     */
    executeIntelligentSearch(whereConfig: any, criteria: ICriteria<T>, options?: {
        single?: boolean;
        array?: boolean;
    }): Promise<any>;
    /**
     * Build configured search conditions for MongoDB
     */
    protected buildConfiguredSearch(searchTerm: string, searchConfig: any[]): any[];
    /**
     * Apply relations with graceful error handling for Mongoose
     */
    protected applyRelationsWithErrorHandling(query: any, relations: string[]): {
        validRelations: string[];
        failedRelations: Array<{
            relation: string;
            error: string;
            severity: string;
        }>;
    };
    /**
     * Build metadata for response
     */
    protected buildMetadata(startTime: number, whereConfig: any, validRelations: string[], failedRelations: Array<{
        relation: string;
        error: string;
        severity: string;
    }>, additionalData?: any): any;
    /**
     * Extract algorithms from search config
     */
    protected extractAlgorithms(searchConfig?: any[]): string[];
}
