import { BaseEventStore, EventStoreConnectionOptions, SaveEventsResult, GetEventsOptions, GetEventsResult, AggregateSnapshot, EventStoreStats } from '../core/event-store.interface';
import { Event } from '../core/event';
interface PrismaClient {
    $connect(): Promise<void>;
    $disconnect(): Promise<void>;
    $transaction<R>(fn: (prisma: PrismaClient) => Promise<R>): Promise<R>;
    $queryRaw<T = any>(query: TemplateStringsArray | string, ...values: any[]): Promise<T>;
    event: {
        findMany(args?: any): Promise<any[]>;
        findFirst(args?: any): Promise<any>;
        findUnique(args?: any): Promise<any>;
        create(args: any): Promise<any>;
        createMany(args: any): Promise<any>;
        update(args: any): Promise<any>;
        delete(args: any): Promise<any>;
        deleteMany(args?: any): Promise<any>;
        count(args?: any): Promise<number>;
        aggregate(args?: any): Promise<any>;
    };
    eventSnapshot: {
        findMany(args?: any): Promise<any[]>;
        findFirst(args?: any): Promise<any>;
        findUnique(args?: any): Promise<any>;
        create(args: any): Promise<any>;
        createMany(args: any): Promise<any>;
        update(args: any): Promise<any>;
        upsert(args: any): Promise<any>;
        delete(args: any): Promise<any>;
        deleteMany(args?: any): Promise<any>;
        count(args?: any): Promise<number>;
    };
}
/**
 * Prisma Event Store implementation
 */
export declare class PrismaEventStore extends BaseEventStore {
    private readonly customPrismaClient?;
    private readonly logger;
    private prisma?;
    constructor(options: EventStoreConnectionOptions, customPrismaClient?: PrismaClient | undefined);
    /**
     * Connects to database via Prisma
     */
    connect(): Promise<void>;
    /**
     * Disconnects from database
     */
    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>;
    /**
     * Converts database record to Event
     */
    private recordToEvent;
}
export {};
//# sourceMappingURL=prisma.event-store.d.ts.map