import { BaseService, ServiceConfig, ServiceHealthStatus, ServiceResponse } from './base-service.js';
import { ObjectId, Document, WithId } from 'mongodb';
export interface DatabaseConfig extends ServiceConfig {
    uri: string;
    databaseName: string;
    maxPoolSize?: number;
    minPoolSize?: number;
    maxIdleTimeMS?: number;
    serverSelectionTimeoutMS?: number;
}
export interface QueryOptions {
    limit?: number;
    skip?: number;
    sort?: Record<string, 1 | -1>;
    projection?: Record<string, 1 | 0>;
    allowedFields?: string[];
    sanitizeQuery?: boolean;
}
export interface UpdateOptions {
    upsert?: boolean;
    sanitizeUpdate?: boolean;
    allowedFields?: string[];
}
export interface AggregationOptions {
    allowedStages?: string[];
    maxPipelineLength?: number;
    sanitizePipeline?: boolean;
}
export declare class DatabaseService extends BaseService {
    private client;
    private db;
    protected config: Required<ServiceConfig> & DatabaseConfig;
    private isConnected;
    constructor(config: DatabaseConfig);
    initialize(): Promise<void>;
    private ensureConnected;
    healthCheck(): Promise<ServiceHealthStatus>;
    find<T extends Document>(collectionName: string, query: Record<string, any>, options?: QueryOptions): Promise<ServiceResponse<WithId<T>[]>>;
    findOne<T extends Document>(collectionName: string, query: Record<string, any>, options?: QueryOptions): Promise<ServiceResponse<WithId<T> | null>>;
    count(collectionName: string, query: Record<string, any>, options?: QueryOptions): Promise<ServiceResponse<number>>;
    insertOne<T extends Document>(collectionName: string, document: T): Promise<ServiceResponse<ObjectId>>;
    updateOne(collectionName: string, filter: Record<string, any>, update: Record<string, any>, options?: UpdateOptions): Promise<ServiceResponse<boolean>>;
    deleteOne(collectionName: string, filter: Record<string, any>, options?: QueryOptions): Promise<ServiceResponse<boolean>>;
    aggregate<T extends Document>(collectionName: string, pipeline: Record<string, any>[], options?: AggregationOptions): Promise<ServiceResponse<WithId<T>[]>>;
    getStats(): Promise<ServiceResponse<any>>;
    listCollections(): Promise<ServiceResponse<string[]>>;
    private sanitizeQuery;
    private sanitizeUpdate;
    private sanitizePipeline;
    close(): Promise<void>;
    isConnectionHealthy(): boolean;
}
