import { Base } from '../Base/Base';
import { IModelRes, TQueryCb, IQueryData, IQuery, AppContext, IDatabaseInfo, IAppDB } from '../../../index';
import { MongoClient, Db } from 'mongodb';
/**
 * Интерфейс для сохранения информации работы базы данных
 */
export interface IMongoDbInfo extends IDatabaseInfo {
    /**
     * Клиент подключения
     */
    mongoClient: MongoClient | null;
    /**
     * Само подключение
     */
    mongoConnect: MongoClient | null;
}
/**
 * Адаптер для работы с базой данных mongodb
 */
export declare class MongoAdapter extends Base<IMongoDbInfo> {
    /**
     * Формат базы данных
     */
    dbFormat: string;
    constructor(options?: IAppDB);
    /**
     * Метод инициализации плагина.
     * Вызывается один раз при подключении через `bot.use()`.
     * @param appContext Контекст приложения
     */
    init(appContext: AppContext): void;
    connect(): Promise<boolean>;
    /**
     * Выполняет UPDATE-запрос.
     * @param updateData Дополнительная информация для запроса. Содержит сам запроса, а также название таблицы и прочие данные.
     */
    _update(updateData: IQuery): Promise<boolean>;
    /**
     * Выполняет INSERT-запрос.
     * @param insertData Дополнительная информация для запроса. Содержит сам запроса, а также название таблицы и прочие данные.
     */
    _insert(insertData: IQuery): Promise<boolean>;
    /**
     * Выполняет DELETE-запрос.
     * @param removeData Дополнительная информация для запроса. Содержит сам запроса, а также название таблицы и прочие данные.
     */
    _remove(removeData: IQuery): Promise<boolean>;
    /**
     * Выполняет произвольный запрос через callback.
     *
     * @param callback функция обработчик
     */
    _query(callback: TQueryCb<MongoClient, Db>): Promise<unknown | null>;
    /**
     * Выполняет произвольный запрос через callback.
     *
     * Внутри себя вызывает this._query, основное отличие в том, что в данном методе пишутся метрики.
     * @param callback функция обработчик
     */
    query(callback: TQueryCb<MongoClient, Db>): Promise<unknown | IModelRes>;
    /**
     * Валидация запросов.
     * Валидирует запрос, приводя его к корректному виду
     * @param query
     * @param element
     */
    validate(query: IQuery, element: IQueryData | null): IQueryData;
    /**
     * Выполняет SELECT-запрос.
     * @param selectData Дополнительная информация для запроса. Содержит информацию о таблице и структуре.
     * @param where Сам запрос
     * @param isOne Определяет нужно ли вернуть только 1 найденную запись, либо отдать все доступные данные.
     */
    _select(selectData: IQuery, where: IQueryData | null, isOne?: boolean): Promise<IModelRes>;
    /**
     * Проверяет, установлено ли соединение с БД.
     */
    isConnected(): Promise<boolean>;
    /**
     * Сохранение логов
     * @param errorMsg
     * @param error
     * @protected
     */
    protected _saveLog(errorMsg: string, error?: Error): void;
    /**
     * Закрывает все подключения к БД.
     * Все процессы завершаются, и происходит сохранение данных.
     */
    destroy(): Promise<void>;
    /**
     * Закрывает подключение к определенной таблице.
     * В MongoDB нет концепции "закрытия таблицы". Метод close() закрывает всё соединение с базой.
     * @param tableName
     */
    close(tableName: string): Promise<void>;
}
