import { BaseService, ServiceConfig, ServiceResponse } from "./base-service.js";
export interface DatabaseConfig extends ServiceConfig {
    uri: string;
    dbName: string;
    connectionOptions?: {
        maxPoolSize?: number;
        minPoolSize?: number;
        maxIdleTimeMS?: number;
        serverSelectionTimeoutMS?: number;
    };
}
export interface QueryOptions {
    sanitize?: boolean;
    allowedFields?: string[];
    limit?: number;
    skip?: number;
    sort?: Record<string, 1 | -1>;
}
export interface AggregationOptions {
    sanitize?: boolean;
    allowedStages?: string[];
    maxPipelineLength?: number;
}
export declare class DatabaseService extends BaseService {
    private dbConfig;
    private client?;
    private db?;
    private isConnected;
    constructor(dbConfig: DatabaseConfig);
    /**
     * Connect to database
     */
    connect(): Promise<ServiceResponse<boolean>>;
    /**
     * Disconnect from database
     */
    disconnect(): Promise<ServiceResponse<boolean>>;
    /**
     * Find documents in collection
     */
    find<T = any>(collectionName: string, query: any, options?: QueryOptions): Promise<ServiceResponse<T[]>>;
    /**
     * Find one document in collection
     */
    findOne<T = any>(collectionName: string, query: any, options?: QueryOptions): Promise<ServiceResponse<T | null>>;
    /**
     * Aggregate documents in collection
     */
    aggregate<T = any>(collectionName: string, pipeline: any[], options?: AggregationOptions): Promise<ServiceResponse<T[]>>;
    /**
     * Count documents in collection
     */
    count(collectionName: string, query?: any, options?: QueryOptions): Promise<ServiceResponse<number>>;
    /**
     * Insert document into collection
     */
    insertOne<T = any>(collectionName: string, document: T): Promise<ServiceResponse<string>>;
    /**
     * Update document in collection
     */
    updateOne(collectionName: string, filter: any, update: any, options?: QueryOptions): Promise<ServiceResponse<{
        matchedCount: number;
        modifiedCount: number;
    }>>;
    /**
     * Delete document from collection
     */
    deleteOne(collectionName: string, filter: any, options?: QueryOptions): Promise<ServiceResponse<number>>;
    /**
     * Ensure database connection
     */
    private ensureConnected;
    /**
     * Get collection instance
     */
    private getCollection;
    /**
     * Sanitize MongoDB query
     */
    private sanitizeQuery;
    /**
     * Sanitize update operations
     */
    private sanitizeUpdate;
    /**
     * Sanitize aggregation pipeline
     */
    private sanitizeAggregationPipeline;
    /**
     * Build find options
     */
    private buildFindOptions;
    /**
     * Sanitize URI for logging
     */
    private sanitizeUri;
    /**
     * Health check implementation
     */
    healthCheck(): Promise<boolean>;
    /**
     * Get database statistics
     */
    getStats(): Promise<ServiceResponse<any>>;
    /**
     * List collections
     */
    listCollections(): Promise<ServiceResponse<string[]>>;
}
