import { AnyObject } from '../../../../common/types/custom_type.types.cjs';
import { ProvideEntity } from '../../../../common/model_factory.cjs';
import { DatabaseConfig } from './database_config.port.cjs';

declare class DatabaseOperation<AdditionalProperty = AnyObject> {
    id: string;
    name: string;
    status: `QUERYING` | `CLOSING`;
    time: Date;
    additional: AdditionalProperty;
    constructor(id: string, name: string, status?: `QUERYING` | `CLOSING`, time?: Date, additional?: AdditionalProperty);
    static create: (input: ProvideEntity<DatabaseOperation<AnyObject>, "id" | "status" | "time" | "additional">, options?: {
        defaultValue: boolean;
        excludeExtraProp: boolean;
    } | undefined, customMapperOverride?: ((input: ProvideEntity<DatabaseOperation<AnyObject>, "id" | "status" | "time" | "additional">) => never) | undefined) => DatabaseOperation<AnyObject>;
}
declare class DatabaseConnection<DatabaseClient = AnyObject, OperationAdditionalProperty = AnyObject> {
    name: string;
    database_config: DatabaseConfig;
    database_client: DatabaseClient;
    operations: Array<DatabaseOperation<OperationAdditionalProperty>>;
    current_operation?: DatabaseOperation<OperationAdditionalProperty> | undefined;
    status: `CREATED` | `QUERYING` | `CLOSING` | `CLOSED`;
    type: `READ` | `WRITE`;
    timeout: number;
    created_at: number;
    reused_count: number;
    constructor(name: string, database_config: DatabaseConfig, database_client: DatabaseClient, operations?: Array<DatabaseOperation<OperationAdditionalProperty>>, current_operation?: DatabaseOperation<OperationAdditionalProperty> | undefined, status?: `CREATED` | `QUERYING` | `CLOSING` | `CLOSED`, type?: `READ` | `WRITE`, timeout?: number, created_at?: number, reused_count?: number);
    static create: (input: ProvideEntity<DatabaseConnection<any, any>, "status" | "timeout" | "reused_count" | "created_at">, options?: {
        defaultValue: boolean;
        excludeExtraProp: boolean;
    } | undefined, customMapperOverride?: ((input: ProvideEntity<DatabaseConnection<any, any>, "status" | "timeout" | "reused_count" | "created_at">) => never) | undefined) => DatabaseConnection<any, any>;
}

export { DatabaseConnection, DatabaseOperation };
