import { CallVariables } from './call';
import { Client } from './client';
import { Form } from './form';
export interface Reporting {
    /**
     * Успішність операції.
     * @type {boolean}
     */
    success?: boolean;
    /**
     * Ідентифікатор агента.
     * @type {number}
     */
    agent_id?: number;
    /**
     * Час наступного розподілу.
     * @type {number}
     */
    next_distribute_at?: number;
    /**
     * Інформація про комунікацію.
     * @type {MemberCommunication}
     */
    communication?: MemberCommunication;
    /**
     * Нові комунікації.
     * @type {MemberCommunication[]}
     */
    new_communication?: MemberCommunication[];
    /**
     * Опис.
     * @type {string}
     */
    description?: string;
    /**
     * Відображати чи ні.
     * @type {boolean}
     */
    display?: boolean;
    /**
     * Термін дії.
     * @type {number}
     */
    expire?: number;
    /**
     * Змінні виклику.
     * @type {CallVariables}
     */
    variables?: CallVariables;
    /**
     * Назва.
     * @type {string}
     */
    name?: string;
    /**
     * Часовий пояс.
     * @type {object}
     */
    timezone?: object;
}
/**
 * Перелік станів завдання.
 * @enum {string}
 */
export declare enum JobState {
    /**
     * Стан завдання - розподіл.
     */
    Distribute = "distribute",
    /**
     * Стан завдання - пропозиція.
     */
    Offering = "offering",
    /**
     * Стан завдання - з'єднано.
     */
    Bridged = "bridged",
    /**
     * Стан завдання - пропущено.
     */
    Missed = "missed",
    /**
     * Стан завдання - обробка.
     */
    Processing = "processing",
    /**
     * Стан завдання - закрито.
     */
    Closed = "closed",
    /**
     * Стан завдання - знищено.
     */
    Destroy = "destroy"
}
/**
 * Перелік назв каналів.
 * @enum {string}
 */
export declare enum ChannelName {
    /**
     * Назва каналу - дзвінок.
     */
    Call = "call",
    /**
     * Назва каналу - вихідний дзвінок.
     */
    OutCall = "out_call",
    /**
     * Назва каналу - чат.
     */
    Chat = "chat",
    /**
     * Назва каналу - завдання.
     */
    Task = "task"
}
export interface Node {
    /**
     * Ідентифікатор вузла.
     * @type {number}
     */
    id: number;
    /**
     * Назва вузла.
     * @type {string}
     */
    name: string;
    /**
     * Значення вузла.
     * @type {object}
     */
    value: object;
    /**
     * Діти вузла.
     * @type {Node[]}
     */
    children?: Node[];
}
export interface CommunicationType {
    /**
     * Ідентифікатор типу комунікації.
     * @type {number}
     */
    id: number;
    /**
     * Назва типу комунікації.
     * @type {string}
     */
    name: string;
    channel?: string;
}
export interface MemberCommunication {
    /**
     * Місце призначення комунікації.
     * @type {string}
     */
    destination: string;
    /**
     * Тип комунікації.
     * @type {CommunicationType}
     */
    type: CommunicationType;
    /**
     * Відображення комунікації.
     * @type {string}
     */
    display?: string;
    /**
     * Стан комунікації.
     * @type {number}
     * @todo
     */
    state?: number;
}
export interface ChannelEvent {
    /**
     * Статус події каналу.
     * @type {string}
     */
    status: string;
    /**
     * Ідентифікатор спроби.
     * @type {number}
     */
    attempt_id?: number;
    /**
     * Часова мітка події.
     * @type {number}
     */
    timestamp: number;
    /**
     * Канал події.
     * @type {string}
     */
    channel: string;
}
export interface Distribute extends ChannelEvent {
    /**
     * Ідентифікатор додатку.
     * @type {string}
     */
    app_id: string;
    /**
     * Ідентифікатор черги.
     * @type {number}
     */
    queue_id: number;
    /**
     * Назва черги.
     * @type {string}
     */
    queue_name: string;
    /**
     * Ідентифікатор учасника.
     * @type {number}
     */
    member_id: number;
    /**
     * Назва учасника.
     * @type {string}
     */
    member_name?: string;
    /**
     * Ідентифікатор агента.
     * @type {number}
     */
    agent_id?: number;
    /**
     * Ідентифікатор каналу учасника.
     * @type {string}
     */
    member_channel_id?: string;
    /**
     * Ідентифікатор каналу агента.
     * @type {string}
     */
    agent_channel_id?: string;
    /**
     * Інформація про комунікацію.
     * @type {MemberCommunication}
     */
    communication: MemberCommunication;
    /**
     * Чи є звітність.
     * @type {boolean}
     */
    has_reporting: boolean;
    /**
     * Чи є форма.
     * @type {boolean}
     */
    has_form?: boolean;
    /**
     * Змінні.
     * @type {{ [key: string]: any }}
     */
    variables?: {
        [key: string]: any;
    };
}
export interface TaskData extends Distribute {
    /**
     * Ідентифікатор додатку.
     * @type {string}
     */
    app_id: string;
    /**
     * Час, коли завдання було з'єднано.
     * @type {number}
     */
    bridged_at?: number;
    /**
     * Час, коли завдання залишило.
     * @type {number}
     */
    leaving_at?: number;
    /**
     * Час обробки в секундах.
     * @type {number}
     */
    processing_sec?: number;
    /**
     * Час оновлення обробки в секундах.
     * @type {number}
     */
    processing_renewal_sec?: number;
    /**
     * Час тайм-ауту обробки.
     * @type {number}
     */
    processing_timeout_at?: number;
    /**
     * Тривалість завдання в секундах.
     * @type {number}
     */
    duration: number;
    /**
     * Стан завдання.
     * @type {string}
     */
    state: string;
    /**
     * Форма.
     * @type {Form | null}
     */
    form?: Form | null;
    /**
     * Чи є форма.
     * @type {boolean}
     */
    has_form?: boolean;
}
export interface Offering {
    /**
     * Ідентифікатор каналу учасника.
     * @type {string}
     */
    member_channel_id?: string;
    /**
     * Ідентифікатор каналу агента.
     * @type {string}
     */
    agent_channel_id?: string;
    /**
     * Автоматичний прийом.
     * @type {boolean}
     */
    auto_answer: boolean;
}
export interface Missed {
    /**
     * Тайм-аут.
     * @type {number}
     */
    timeout: number;
    /**
     * Кількість пропущених відповідей.
     * @type {number}
     */
    no_answers: number;
}
export interface WrapTime {
    /**
     * Тайм-аут.
     * @type {number}
     */
    timeout: number;
}
export interface Processing {
    /**
     * Тайм-аут обробки.
     * @type {number | null}
     */
    timeout: number | null;
    /**
     * Час обробки в секундах.
     * @type {number}
     */
    sec: number;
    /**
     * Час оновлення обробки в секундах.
     * @type {number}
     */
    renewal_sec?: number;
}
export interface DistributeEvent extends ChannelEvent {
    /**
     * Інформація про розподіл.
     * @type {Distribute}
     */
    distribute: Distribute;
}
export interface BridgedEvent extends ChannelEvent {
    /**
     * Форма.
     * @type {Form | null}
     */
    form?: Form | null;
}
export interface OfferingEvent extends ChannelEvent {
    /**
     * Інформація про пропозицію.
     * @type {Offering}
     */
    offering: Offering;
}
export interface FormEvent extends ChannelEvent {
    /**
     * Форма.
     * @type {Form | null}
     */
    form?: Form | null;
}
export interface TransferEvent extends ChannelEvent {
    /**
     * Ідентифікатор спроби передачі.
     * @type {number}
     */
    to_attempt_id: number;
    /**
     * Інформація про розподіл.
     * @type {Distribute}
     */
    distribute: Distribute;
    form?: Form;
}
export interface MissedEvent extends ChannelEvent {
    /**
     * Інформація про пропущені події.
     * @type {Missed}
     */
    missed: Missed;
}
export interface WrapTimeEvent extends ChannelEvent {
    /**
     * Інформація про час завершення.
     * @type {WrapTime}
     */
    wrap_time: WrapTime;
}
export interface ProcessingEvent extends ChannelEvent {
    /**
     * Інформація про обробку.
     * @type {Processing}
     */
    processing: Processing;
}
export interface Queue {
    /**
     * Ідентифікатор черги.
     * @type {number}
     */
    id: number;
    /**
     * Назва черги.
     * @type {string}
     */
    name: string;
}
export declare class Task {
    private readonly client;
    protected distribute: Distribute;
    /**
     * Історія розподілів.
     * @type {Distribute[]}
     */
    history: Distribute[];
    /**
     * Інформація про комунікацію.
     * @type {MemberCommunication}
     */
    communication: MemberCommunication;
    /**
     * Ідентифікатор завдання.
     * @type {number}
     */
    id: number;
    /**
     * Стан завдання.
     * @type {JobState}
     */
    state: JobState;
    /**
     * Дані для постобробки.
     * @type {object}
     */
    postProcessData: object;
    /**
     * Час останньої зміни статусу.
     * @type {number}
     */
    lastStatusChange: number;
    /**
     * Час створення завдання.
     * @type {number}
     */
    createdAt: number;
    /**
     * Час пропозиції.
     * @type {number}
     */
    offeringAt: number;
    /**
     * Час відповіді.
     * @type {number}
     */
    answeredAt: number;
    /**
     * Час з'єднання.
     * @type {number}
     */
    bridgedAt: number;
    /**
     * Час початку обробки.
     * @type {number}
     */
    startProcessingAt: number;
    /**
     * Час завершення.
     * @type {number}
     */
    stopAt: number;
    /**
     * Час закриття.
     * @type {number}
     */
    closedAt: number;
    /**
     * Час звітування.
     * @type {number}
     */
    reportedAt: number;
    /**
     * Форма.
     * @type {Form | null}
     */
    form: Form | null;
    /**
     * Інформація про обробку.
     * @type {Processing | null}
     */
    _processing: Processing | null;
    /**
     * Автоматичний прийом.
     * @type {boolean}
     */
    autoAnswered: boolean;
    /**
     * Параметр автоматичного прийому.
     * @type {boolean | string | number}
     */
    _autoAnswerParam: boolean | string | number;
    /**
     * Тайм-аут автоматичного прийому.
     * @type {any | null}
     */
    _autoAnswerTimerId: any | null;
    /**
     * Конструктор класу.
     * @param {Client} client - Клієнт.
     * @param {ChannelEvent} e - Подія каналу.
     * @param {Distribute} distribute - Інформація про розподіл.
     */
    constructor(client: Client, e: ChannelEvent, distribute: Distribute);
    /**
     * Отримати чергу завдання.
     * @returns {Queue}
     */
    get queue(): Queue;
    /**
     * Отримати тривалість завдання в секундах.
     * @returns {number}
     */
    get duration(): number;
    /**
     * Чи є форма.
     * @returns {boolean}
     */
    get hasForm(): boolean;
    /**
     * Отримати канал.
     * @returns {string}
     */
    get channel(): string;
    /**
     * Чи дозволено прийняття завдання.
     * @returns {boolean}
     */
    get allowAccept(): boolean;
    /**
     * Чи дозволено відхилення завдання.
     * @returns {boolean}
     */
    get allowDecline(): boolean;
    /**
     * Чи дозволено закриття завдання.
     * @returns {boolean}
     */
    get allowClose(): boolean;
    /**
     * Отримати ідентифікатор учасника.
     * @returns {number}
     */
    get memberId(): number;
    /**
     * Отримати ідентифікатор черги.
     * @returns {number}
     */
    get queueId(): number;
    /**
     * Чи є звітність.
     * @returns {boolean}
     */
    get hasReporting(): boolean;
    /**
     * Чи дозволено звітування.
     * @returns {boolean}
     */
    get allowReporting(): boolean;
    /**
     * Отримати ідентифікатор каналу агента.
     * @returns {string}
     */
    get agentChannelId(): string | undefined;
    /**
     * Встановити стан завдання.
     * @param {string} state - Стан завдання.
     * @todo
     */
    setState(state: string): void;
    setForm(form: Form | null): void;
    /**
     * Встановити час відповіді.
     * @param {number} t - Час відповіді.
     */
    setAnswered(t: number): void;
    /**
     * Встановити пропозицію.
     * @param {OfferingEvent} e - Подія пропозиції.
     */
    setOffering(e: OfferingEvent): void;
    /**
     * Встановити з'єднання.
     * @param {BridgedEvent} e - Подія з'єднання.
     */
    setBridged(e: BridgedEvent): void;
    /**
     * Встановити обробку.
     * @param {number} now - Час обробки.
     * @param {Processing} p - Інформація про обробку.
     */
    setProcessing(now: number, p: Processing): void;
    /**
     * Встановити закриття завдання.
     * @param {number} now - Час закриття.
     */
    setClosed(now: number): void;
    /**
     * Встановити новий розподіл.
     * @param {Distribute} d - Інформація про новий розподіл.
     */
    setTransferred(d: Distribute, f?: Form): void;
    /**
     * Встановити пропущене завдання.
     */
    setMissed(): void;
    /**
     * Отримати час тайм-ауту обробки.
     * @returns {number | null}
     */
    get processingTimeoutAt(): number | null;
    /**
     * Отримати тривалість обробки в секундах.
     * @returns {number | null}
     */
    get processingSec(): number | null;
    /**
     * Отримати спробу.
     * @returns {Task}
     */
    get attempt(): this;
    /**
     * Отримати змінні завдання.
     * @returns {object}
     */
    get variables(): {
        [key: string]: any;
    };
    /**
     * Чи є учасник.
     * @returns {boolean}
     */
    get isMember(): boolean;
    /**
     * Отримати номер для відображення.
     * @returns {string}
     */
    get displayNumber(): string;
    /**
     * Отримати ім'я для відображення.
     * @returns {string | null}
     */
    get displayName(): string | null;
    /**
     * Отримати відображення (ім'я та номер).
     * @returns {string}
     */
    get display(): string;
    /**
     * Отримати тривалість оновлення в секундах.
     * @returns {number | null}
     */
    get renewalSec(): number | null;
    /**
     * Чи є автоматичний прийом.
     * @returns {boolean}
     */
    get autoAnswer(): boolean;
    /**
     * Отримати затримку автоматичного прийому.
     * @returns {number}
     */
    get autoAnswerDelay(): number;
    /**
     * Прийняти завдання.
     * @returns {Promise<any>}
     */
    accept(): Promise<object>;
    /**
     * Автоматично прийняти завдання із затримкою.
     * @returns {Promise<void>}
     */
    acceptDelay(): Promise<void>;
    /**
     * Закрити завдання.
     * @returns {Promise<any>}
     */
    close(): Promise<object>;
    /**
     * Відхилити завдання.
     * @returns {Promise<any>}
     */
    decline(): Promise<object>;
    /**
     * Звітувати про завдання.
     * @param {Reporting} reporting - Дані звітності.
     * @returns {Promise<any>}
     */
    reporting(reporting: Reporting): Promise<object>;
    /**
     * Оновити завдання.
     * @param {number} [sec] - Кількість секунд для оновлення.
     * @returns {Promise<any>}
     */
    renew(sec?: number): Promise<object>;
    /**
     * Виконати дію з формою.
     * @param {string} action - Дія, яку потрібно виконати.
     * @param {Map<string, string | number | object | any[]>} fields - Поля форми.
     * @returns {Promise<any>}
     * @throws {Error} Якщо активна форма не знайдена.
     */
    formAction(action: string, fields: Map<string, string | number | object | any[]> | undefined): Promise<object>;
    saveForm(form: Form | null, fields: Map<string, string | number | object | any[]> | null): Promise<object | undefined>;
    componentAction(componentId: string, action: string, vars: Map<string, string | number | object | any[]> | undefined, sync?: boolean): Promise<object>;
}
//# sourceMappingURL=task.d.ts.map