import { BaseEventStore, EventStoreConnectionOptions, SaveEventsResult, GetEventsOptions, GetEventsResult, AggregateSnapshot, EventStoreStats } from '../core/event-store.interface';
import { Event } from '../core/event';
interface MongoDBClient {
    connect(): Promise<void>;
    close(): Promise<void>;
    db(name?: string): MongoDBDatabase;
}
interface MongoDBDatabase {
    collection(name: string): MongoDBCollection;
}
interface MongoDBCollection {
    findOne(filter: any, options?: any): Promise<any>;
    find(filter: any, options?: any): MongoDBCursor;
    insertOne(doc: any, options?: any): Promise<any>;
    insertMany(docs: any[], options?: any): Promise<any>;
    updateOne(filter: any, update: any, options?: any): Promise<any>;
    deleteOne(filter: any, options?: any): Promise<any>;
    deleteMany(filter: any, options?: any): Promise<any>;
    countDocuments(filter?: any): Promise<number>;
    createIndex(keys: any, options?: any): Promise<string>;
    aggregate(pipeline: any[]): MongoDBCursor;
}
interface MongoDBCursor {
    sort(sort: any): MongoDBCursor;
    limit(limit: number): MongoDBCursor;
    toArray(): Promise<any[]>;
}
/**
 * MongoDB Event Store implementation
 */
export declare class MongoDBEventStore extends BaseEventStore {
    private readonly customClient?;
    private readonly logger;
    private client?;
    private database?;
    private eventsCollection?;
    private snapshotsCollection?;
    constructor(options: EventStoreConnectionOptions, customClient?: MongoDBClient | undefined);
    /**
     * Connects to MongoDB
     */
    connect(): Promise<void>;
    /**
     * Disconnects from MongoDB
     */
    disconnect(): Promise<void>;
    /**
     * Saves events for aggregate
     */
    saveEvents(aggregateId: string, events: Event[], expectedVersion?: number): Promise<SaveEventsResult>;
    /**
     * Gets events for aggregate
     */
    getEvents(aggregateId: string, options?: GetEventsOptions): Promise<GetEventsResult>;
    /**
     * Saves aggregate snapshot
     */
    saveSnapshot(snapshot: AggregateSnapshot): Promise<void>;
    /**
     * Gets the latest snapshot for aggregate
     */
    getSnapshot(aggregateId: string): Promise<AggregateSnapshot | null>;
    /**
     * Deletes aggregate snapshot
     */
    deleteSnapshot(aggregateId: string): Promise<void>;
    /**
     * Gets events by type
     */
    getEventsByType(eventType: string, options?: GetEventsOptions): Promise<GetEventsResult>;
    /**
     * Gets events in time range
     */
    getEventsByTimeRange(from: Date, to: Date, options?: GetEventsOptions): Promise<GetEventsResult>;
    /**
     * Deletes all events for aggregate
     */
    deleteAggregate(aggregateId: string): Promise<void>;
    /**
     * Gets Event Store statistics
     */
    getStats(): Promise<EventStoreStats>;
    /**
     * Clears all data (used for testing)
     */
    clear(): Promise<void>;
    /**
     * Checks Event Store health
     */
    healthCheck(): Promise<boolean>;
    /**
     * Creates indexes for query optimization
     */
    private createIndexes;
    /**
     * Converts EventDocument to Event
     */
    private documentToEvent;
}
export {};
//# sourceMappingURL=mongodb.event-store.d.ts.map