import { UserInterface } from '../models/userModel';
import { Device } from '../devices/device';
import { RequestOutput } from '../providers/httpProvider';
import { TopicData } from './mqttService';
/**
 * Skill Service.
 */
declare class SkillService {
    /**
     * Temporary User Devices.
     *
     * @protected
     */
    protected tempUserDevices: TempUserDevices;
    /**
     * Temporary User State Callbacks.
     *
     * @protected
     */
    protected tempUserStateCallbacks: TempUserStateCallbacks;
    /**
     * Yandex Callbacks initialization.
     *
     * @param topic
     * @param oldMessage
     * @param newMessage
     * @returns Promise<boolean>
     */
    initYandexCallbacks(topic: string, oldMessage: string | undefined, newMessage: string): Promise<boolean>;
    /**
     * Execute temporary user state callback.
     *
     * @param user
     * @param devices
     * @returns Promise<RequestOutput | boolean>
     */
    execTempUserStateCallback(user: UserInterface, devices: Device[]): Promise<RequestOutput | boolean>;
    /**
     * Notification about device state change.
     * https://yandex.ru/dev/dialogs/smart-home/doc/en/reference-alerts/post-skill_id-callback-state
     *
     * @param userId
     * @param devices
     * @returns Promise<RequestOutput | boolean>
     */
    callbackState(userId: string | number, devices: Device[]): Promise<RequestOutput | boolean>;
    /**
     * Notification about device parameter change.
     * https://yandex.ru/dev/dialogs/smart-home/doc/en/reference-alerts/post-skill_id-callback-discovery
     *
     * @param userId
     * @returns Promise<RequestOutput | boolean>
     */
    callbackDiscovery(userId: string | number): Promise<RequestOutput | boolean>;
    /**
     * Get UNIX Timestamp.
     *
     * @returns number
     */
    getUnixTimestamp(): number;
    /**
     * Log the latest Skill Update for the User.
     *
     * @param email
     * @param devices
     * @returns Promise<boolean>
     */
    logLatestSkillUpdate(email: string, devices: Device[]): Promise<boolean>;
    /**
     * Get the latest logged Skill Update for the User.
     *
     * @param email
     * @returns Promise<LogUserSkillUpdate | undefined>
     */
    getLatestSkillUpdate(email: string): Promise<LogUserSkillUpdate | undefined>;
    /**
     * Is Callback State Available?
     *
     * @param topicData
     * @param oldMessage
     * @param newMessage
     * @returns Promise<boolean>
     */
    isCallbackStateAvailable(topicData: TopicData, oldMessage: string | undefined, newMessage: string): Promise<boolean>;
    /**
     * Check if the State Topic has been changed.
     *
     * @param oldMessage
     * @param newMessage
     * @param deviceType
     * @returns Promise<boolean>
     */
    isStateTopicChanged(oldMessage: string | undefined, newMessage: string, deviceType?: string): Promise<boolean>;
    /**
     * Check if the device has the wrong property with the "event" type.
     *
     * @param user
     * @param updatedDevice
     * @returns Promise<boolean>
     * @protected
     */
    protected isDeviceParameterChanged(user: UserInterface, updatedDevice: Device): Promise<boolean>;
    /**
     * Add Temporary User Device.
     *
     * @param user
     * @param updatedDevice
     * @returns Promise<TempTimeoutDevices>
     * @protected
     */
    protected addTempUserDevice(user: UserInterface, updatedDevice: Device): Promise<TempTimeoutDevices>;
    /**
     * Get Payload Device.
     *
     * @param device
     * @returns Device
     * @protected
     */
    protected getPayloadDevice(device: Device): Device;
    /**
     * Delete Temporary User Devices.
     *
     * @param user
     * @returns void
     * @protected
     */
    protected deleteTempUserDevices(user: UserInterface): void;
}
/**
 * Temp Payload Devices Type.
 */
export type TempPayloadDevices = {
    /**
     * Device ID => Payload Device.
     */
    [key: string]: Device;
};
/**
 * Temp Timeout Devices Type.
 */
export type TempTimeoutDevices = {
    timeoutId: any;
    payloadDevices: TempPayloadDevices;
    isDeviceParameterChanged: boolean;
};
/**
 * Log User Skill Update Type.
 */
export type LogUserSkillUpdate = {
    devices: Device[];
    updatedAt: number;
};
/**
 * Temporary User Devices Type.
 */
export type TempUserDevices = {
    /**
     * User ID => Timeout Devices.
     */
    [key: string | number]: TempTimeoutDevices;
};
/**
 * Temporary User State Callbacks Type.
 */
export type TempUserStateCallbacks = {
    /**
     * User ID => True/False.
     */
    [key: string | number]: boolean;
};
declare const _default: SkillService;
export default _default;
