/**
 * Модуль для тестирования вашего приложения.
 * Предоставляет инструменты для отладки и тестирования функциональности итогового приложения
 */
import { TAppType } from './interfaces/IAppContext';
import { BotController } from '../controller';
import { Bot, TBotControllerClass, TRunResult } from './Bot';
/**
 * Функция для получения конфигурации пользовательского приложения
 *
 * @callback TUserBotConfigCb
 * @param query - Пользовательский запрос
 * @param userId - Идентификатор пользователя
 * @param count - Номер сообщения в диалоге
 * @returns Конфигурация для пользовательского приложения
 */
export type TUserBotConfigCb = (query: string, userId: string, count: number) => unknown;
/**
 * Параметры для тестирования приложения.
 * Определяют поведение и отображение результатов тестирования
 */
export interface IBotTestParams {
    /**
     * Отображать полный ответ навыка
     * @defaultValue false
     */
    isShowResult?: boolean;
    /**
     * Отображать данные из хранилища
     * @defaultValue false
     */
    isShowStorage?: boolean;
    /**
     * Отображать время выполнения запроса
     * @defaultValue true
     */
    isShowTime?: boolean;
}
/**
 * Класс для тестирования созданного навыка/бота через консольный интерфейс. Позволяет протестировать логику вашего приложения без предварительной публикации.
 * Также предоставляет интерактивный режим для отладки и тестирования функциональности.
 * Для того чтобы протестировать необходимую платформу, необходимо указать `appType`, в случае если значение не указано или установлено в auto, то для тестирования будет использоваться первая платформа.
 *
 * @extends Bot
 *
 * @example
 * ```ts
 * const botTest = new BotTest();
 * botTest.setPlatformParams({
 *   intents: [{
 *     name: 'greeting',
 *     slots: ['привет', 'здравствуйте']
 *   }]
 * });
 * botTest.initBotController(MyController);
 *
 * // Запуск тестирования
 * await botTest.test({
 *   isShowResult: true,
 *   isShowStorage: true
 * });
 * ```
 */
export declare class BotTest extends Bot {
    #private;
    protected _botController: BotController;
    constructor(type?: TAppType, botController?: TBotControllerClass);
    initBotController(fn: TBotControllerClass): this;
    /**
     * Запускает интерактивное тестирование приложения.
     * Позволяет вводить команды и получать ответы в консоли.
     * Также, если не задан `setAppMode` равный `strict_prod`, то режим автоматически выставится в `dev`
     *
     * @param {IBotTestParams} [params] - Параметры тестирования
     * @returns {Promise<void>}
     *
     * @example
     * ```ts
     * // Базовое тестирование
     * await botTest.test();
     *
     * // Расширенное тестирование с отображением всех данных
     * await botTest.test({
     *   isShowResult: true,
     *   isShowStorage: true,
     *   isShowTime: true
     * });
     * ```
     */
    test(params?: IBotTestParams): Promise<void>;
    protected _clearState(): void;
    /**
     * Формирует конфигурацию для тестирования конкретной платформы.
     * Создает структуру данных, соответствующую формату выбранной платформы
     *
     * @param query - Пользовательский запрос
     * @param count - Номер сообщения в диалоге
     * @param state - Данные из хранилища
     * @returns Конфигурация для выбранной платформы
     *
     * @protected
     */
    protected getSkillContent(query: string, count: number, state: Record<string, unknown> | string): unknown;
    /**
     * Запуск обработку запроса
     * Не рекомендуется вызывать самостоятельно, ответственность за вызов метода лежит за классом.
     * @param appType
     * @param content
     */
    run(appType?: TAppType | null, content?: string | null): Promise<TRunResult>;
}
