import { IModelRes, IModelRules } from './IModel';
import { IQueryData, QueryData } from '../db/QueryData';
import { Db, MongoClient } from 'mongodb';
export type TKey = string | number | null;
export interface IDbControllerResult<TValue = unknown> {
    [keyStr: string]: TValue;
    [keyInt: number]: TValue;
}
export type TQueryCb = (client: MongoClient, db: Db) => Promise<IModelRes>;
export type TStateData = Record<string | number, any>;
export interface IDbControllerModel {
    tableName: string;
    primaryKeyName: TKey;
    setRules(rules: IModelRules[]): void;
    getValue(res: IModelRes): IDbControllerResult | null;
    select(select: IQueryData | null, isOne: boolean): Promise<IModelRes>;
    insert(insertData: QueryData): any;
    update(updateData: QueryData): any;
    save(saveData: QueryData, isNew: boolean): Promise<any>;
    remove(removeData: QueryData): any;
    query(callback: TQueryCb): any;
    selectOne(query: IQueryData | null): Promise<IModelRes | null>;
    escapeString(str: string | number): string;
    isConnected(): Promise<boolean>;
    destroy(): void;
}
