import * as Tp from 'thingpedia';
import { Ast, SchemaRetriever } from 'thingtalk';
import AbstractDialogueAgent, { DeviceInfo } from '../abstract_dialogue_agent';
import { EntityRecord } from '../entity-linking/entity-finder';
import StatementSimulator, { ThingTalkSimulatorState, SimulationDatabase } from './statement_simulator';
import ValueCategory from '../value-category';
export interface SimulationDialogueAgentOptions {
    schemaRetriever?: SchemaRetriever;
    thingpediaClient?: Tp.BaseClient;
    locale: string;
    timezone: string | undefined;
    rng: () => number;
    database?: SimulationDatabase;
    overrides?: Map<string, string>;
    interactive: boolean;
}
/**
 * The dialogue agent used at simulation time.
 *
 * This is a completely stateless class, as it handles many possible dialogues at the same
 * time.
 */
export default class SimulationDialogueAgent extends AbstractDialogueAgent<ThingTalkSimulatorState> {
    private _executor;
    private _thingpedia;
    private _rng;
    private _database?;
    private _interactive;
    constructor(options: SimulationDialogueAgentOptions);
    protected get executor(): StatementSimulator;
    protected getAllDevicesOfKind(kind: string): DeviceInfo[];
    protected tryConfigureDevice(kind: string): Promise<never>;
    disambiguate(type: 'device' | 'contact', name: string | null, choices: string[], hint?: string): Promise<number>;
    lookupContact(category: ValueCategory, name: string): Promise<never>;
    protected addDisplayToContact(contact: Ast.EntityValue): Promise<void>;
    askMissingContact(category: ValueCategory, name: string): Promise<never>;
    protected lookupLocation(searchKey: string, previousLocations: Ast.AbsoluteLocation[]): Promise<Ast.LocationValue>;
    private _getIDs;
    protected lookupEntityCandidates(entityType: string, entityDisplay: string): Promise<EntityRecord[]>;
    protected resolveUserContext(variable: string): Promise<Ast.Value>;
    getPreferredUnit(type: string): string;
}
