import { DatabaseConfig } from '../models/database_config.port.cjs';
import { DatabaseConnection } from '../models/database_connection.port.cjs';
import { RequestContext } from '../../../../models/request_context.cjs';

declare type DatabaseOptions = {
    [key: string]: any;
    retries?: number;
    overrideConfig?: Partial<DatabaseConfig> | Promise<Partial<DatabaseConfig> | undefined>;
    ignoreDefaultConfig?: boolean;
};
declare type DatabaseClient<DatabaseConnectionResult extends DatabaseConnection, Options extends DatabaseOptions = Record<any, any>> = (context: RequestContext, options?: Options) => {
    connect: (_request?: DatabaseClientConnectRequest) => Promise<DatabaseConnectionResult>;
    close: (_request: {
        connection: DatabaseConnectionResult;
    }) => Promise<void>;
    getConfig: () => DatabaseConfig;
    getTotalConnectionSize: () => number;
    setOverrideConfig: (config: Partial<DatabaseConfig> | Promise<Partial<DatabaseConfig> | undefined>) => void;
};
declare type DatabaseClientConnectRequest = {
    connection_name?: string;
    operation_id?: string;
    type?: `READ` | `WRITE`;
};

export { DatabaseClient, DatabaseClientConnectRequest, DatabaseOptions };
