import * as $protobuf from "protobufjs";
/** Namespace event. */
export namespace event {

    /** Properties of an Agent. */
    interface IAgent {

        /** Agent domain */
        domain?: (string|null);

        /** Agent extension */
        extension?: (string|null);

        /** Agent employeeNumber */
        employeeNumber?: (string|null);

        /** Agent agentUuid */
        agentUuid?: (string|null);

        /** Agent agentName */
        agentName?: (string|null);

        /** Agent agentState */
        agentState?: (string|null);

        /** Agent agentStatus */
        agentStatus?: (string|null);

        /** Agent agentContact */
        agentContact?: (string|null);

        /** Agent queueUuid */
        queueUuid?: (string|null);

        /** Agent queueName */
        queueName?: (string|null);

        /** Agent teamUuid */
        teamUuid?: (string|null);

        /** Agent teamName */
        teamName?: (string|null);

        /** Agent session */
        session?: (string|null);

        /** Agent memberUuid */
        memberUuid?: (string|null);

        /** Agent memberDnis */
        memberDnis?: (string|null);

        /** Agent memberCidName */
        memberCidName?: (string|null);

        /** Agent memberCidNumber */
        memberCidNumber?: (string|null);

        /** Agent memberJoinedTime */
        memberJoinedTime?: (number|null);

        /** Agent memberLeavingTime */
        memberLeavingTime?: (number|null);

        /** Agent memberSessionUuid */
        memberSessionUuid?: (string|null);

        /** Agent agentNoAnswerCount */
        agentNoAnswerCount?: (number|null);

        /** Agent agentNoAnswerStatus */
        agentNoAnswerStatus?: (string|null);

        /** Agent agentCallerTime */
        agentCallerTime?: (number|null);

        /** Agent agentAbortedTime */
        agentAbortedTime?: (number|null);

        /** Agent agentAnsweredTime */
        agentAnsweredTime?: (number|null);

        /** Agent bridgeStartTime */
        bridgeStartTime?: (number|null);

        /** Agent bridgeTerminatedTime */
        bridgeTerminatedTime?: (number|null);

        /** Agent hangupCause */
        hangupCause?: (string|null);

        /** Agent action */
        action?: (event.Action|null);
    }

    /** Represents an Agent. */
    class Agent implements IAgent {

        /**
         * Constructs a new Agent.
         * @param [properties] Properties to set
         */
        constructor(properties?: event.IAgent);

        /** Agent domain. */
        public domain: string;

        /** Agent extension. */
        public extension: string;

        /** Agent employeeNumber. */
        public employeeNumber: string;

        /** Agent agentUuid. */
        public agentUuid: string;

        /** Agent agentName. */
        public agentName: string;

        /** Agent agentState. */
        public agentState: string;

        /** Agent agentStatus. */
        public agentStatus: string;

        /** Agent agentContact. */
        public agentContact: string;

        /** Agent queueUuid. */
        public queueUuid: string;

        /** Agent queueName. */
        public queueName: string;

        /** Agent teamUuid. */
        public teamUuid: string;

        /** Agent teamName. */
        public teamName: string;

        /** Agent session. */
        public session: string;

        /** Agent memberUuid. */
        public memberUuid: string;

        /** Agent memberDnis. */
        public memberDnis: string;

        /** Agent memberCidName. */
        public memberCidName: string;

        /** Agent memberCidNumber. */
        public memberCidNumber: string;

        /** Agent memberJoinedTime. */
        public memberJoinedTime: number;

        /** Agent memberLeavingTime. */
        public memberLeavingTime: number;

        /** Agent memberSessionUuid. */
        public memberSessionUuid: string;

        /** Agent agentNoAnswerCount. */
        public agentNoAnswerCount: number;

        /** Agent agentNoAnswerStatus. */
        public agentNoAnswerStatus: string;

        /** Agent agentCallerTime. */
        public agentCallerTime: number;

        /** Agent agentAbortedTime. */
        public agentAbortedTime: number;

        /** Agent agentAnsweredTime. */
        public agentAnsweredTime: number;

        /** Agent bridgeStartTime. */
        public bridgeStartTime: number;

        /** Agent bridgeTerminatedTime. */
        public bridgeTerminatedTime: number;

        /** Agent hangupCause. */
        public hangupCause: string;

        /** Agent action. */
        public action: event.Action;

        /**
         * Encodes the specified Agent message. Does not implicitly {@link event.Agent.verify|verify} messages.
         * @param message Agent message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: event.IAgent, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes an Agent message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns Agent
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): event.Agent;

        /**
         * Verifies an Agent message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates an Agent message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns Agent
         */
        public static fromObject(object: { [k: string]: any }): event.Agent;

        /**
         * Creates a plain object from an Agent message. Also converts values to other types if specified.
         * @param message Agent
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: event.Agent, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this Agent to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };
    }

    /** Properties of a Member. */
    interface IMember {

        /** Member domain */
        domain?: (string|null);

        /** Member memberUuid */
        memberUuid?: (string|null);

        /** Member memberCidName */
        memberCidName?: (string|null);

        /** Member memberCidNumber */
        memberCidNumber?: (string|null);

        /** Member memberState */
        memberState?: (string|null);

        /** Member memberJoinedTime */
        memberJoinedTime?: (number|null);

        /** Member memberLeavingTime */
        memberLeavingTime?: (number|null);

        /** Member memberSessionUuid */
        memberSessionUuid?: (string|null);

        /** Member queueUuid */
        queueUuid?: (string|null);

        /** Member queueName */
        queueName?: (string|null);

        /** Member hangupCause */
        hangupCause?: (string|null);

        /** Member action */
        action?: (event.Action|null);
    }

    /** Represents a Member. */
    class Member implements IMember {

        /**
         * Constructs a new Member.
         * @param [properties] Properties to set
         */
        constructor(properties?: event.IMember);

        /** Member domain. */
        public domain: string;

        /** Member memberUuid. */
        public memberUuid: string;

        /** Member memberCidName. */
        public memberCidName: string;

        /** Member memberCidNumber. */
        public memberCidNumber: string;

        /** Member memberState. */
        public memberState: string;

        /** Member memberJoinedTime. */
        public memberJoinedTime: number;

        /** Member memberLeavingTime. */
        public memberLeavingTime: number;

        /** Member memberSessionUuid. */
        public memberSessionUuid: string;

        /** Member queueUuid. */
        public queueUuid: string;

        /** Member queueName. */
        public queueName: string;

        /** Member hangupCause. */
        public hangupCause: string;

        /** Member action. */
        public action: event.Action;

        /**
         * Encodes the specified Member message. Does not implicitly {@link event.Member.verify|verify} messages.
         * @param message Member message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: event.IMember, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a Member message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns Member
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): event.Member;

        /**
         * Verifies a Member message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a Member message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns Member
         */
        public static fromObject(object: { [k: string]: any }): event.Member;

        /**
         * Creates a plain object from a Member message. Also converts values to other types if specified.
         * @param message Member
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: event.Member, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this Member to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };
    }

    /** Properties of a Queue. */
    interface IQueue {

        /** Queue domain */
        domain?: (string|null);

        /** Queue uuid */
        uuid?: (string|null);

        /** Queue name */
        name?: (string|null);

        /** Queue number */
        number?: (string|null);

        /** Queue agentTotal */
        agentTotal?: (string|null);

        /** Queue agentReady */
        agentReady?: (string|null);

        /** Queue agentAnswered */
        agentAnswered?: (string|null);

        /** Queue memberAborted */
        memberAborted?: (string|null);

        /** Queue memberWaiting */
        memberWaiting?: (string|null);

        /** Queue callsAnswered */
        callsAnswered?: (string|null);

        /** Queue memberAbandoned */
        memberAbandoned?: (string|null);
    }

    /** Represents a Queue. */
    class Queue implements IQueue {

        /**
         * Constructs a new Queue.
         * @param [properties] Properties to set
         */
        constructor(properties?: event.IQueue);

        /** Queue domain. */
        public domain: string;

        /** Queue uuid. */
        public uuid: string;

        /** Queue name. */
        public name: string;

        /** Queue number. */
        public number: string;

        /** Queue agentTotal. */
        public agentTotal: string;

        /** Queue agentReady. */
        public agentReady: string;

        /** Queue agentAnswered. */
        public agentAnswered: string;

        /** Queue memberAborted. */
        public memberAborted: string;

        /** Queue memberWaiting. */
        public memberWaiting: string;

        /** Queue callsAnswered. */
        public callsAnswered: string;

        /** Queue memberAbandoned. */
        public memberAbandoned: string;

        /**
         * Encodes the specified Queue message. Does not implicitly {@link event.Queue.verify|verify} messages.
         * @param message Queue message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: event.IQueue, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a Queue message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns Queue
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): event.Queue;

        /**
         * Verifies a Queue message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a Queue message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns Queue
         */
        public static fromObject(object: { [k: string]: any }): event.Queue;

        /**
         * Creates a plain object from a Queue message. Also converts values to other types if specified.
         * @param message Queue
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: event.Queue, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this Queue to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };
    }

    /** Properties of a Msg. */
    interface IMsg {

        /** Msg content */
        content?: (string|null);

        /** Msg time */
        time?: (number|null);

        /** Msg autoClose */
        autoClose?: (number|null);

        /** Msg cause */
        cause?: (string|null);
    }

    /** Represents a Msg. */
    class Msg implements IMsg {

        /**
         * Constructs a new Msg.
         * @param [properties] Properties to set
         */
        constructor(properties?: event.IMsg);

        /** Msg content. */
        public content: string;

        /** Msg time. */
        public time: number;

        /** Msg autoClose. */
        public autoClose: number;

        /** Msg cause. */
        public cause: string;

        /**
         * Encodes the specified Msg message. Does not implicitly {@link event.Msg.verify|verify} messages.
         * @param message Msg message or plain object to encode
         * @param [writer] Writer to encode to
         * @returns Writer
         */
        public static encode(message: event.IMsg, writer?: $protobuf.Writer): $protobuf.Writer;

        /**
         * Decodes a Msg message from the specified reader or buffer.
         * @param reader Reader or buffer to decode from
         * @param [length] Message length if known beforehand
         * @returns Msg
         * @throws {Error} If the payload is not a reader or valid buffer
         * @throws {$protobuf.util.ProtocolError} If required fields are missing
         */
        public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): event.Msg;

        /**
         * Verifies a Msg message.
         * @param message Plain object to verify
         * @returns `null` if valid, otherwise the reason why it is not
         */
        public static verify(message: { [k: string]: any }): (string|null);

        /**
         * Creates a Msg message from a plain object. Also converts values to their respective internal types.
         * @param object Plain object
         * @returns Msg
         */
        public static fromObject(object: { [k: string]: any }): event.Msg;

        /**
         * Creates a plain object from a Msg message. Also converts values to other types if specified.
         * @param message Msg
         * @param [options] Conversion options
         * @returns Plain object
         */
        public static toObject(message: event.Msg, options?: $protobuf.IConversionOptions): { [k: string]: any };

        /**
         * Converts this Msg to JSON.
         * @returns JSON object
         */
        public toJSON(): { [k: string]: any };
    }

    namespace Msg {

        /** Cause enum. */
        enum Cause {
            CallTimeHangup = 0
        }
    }

    /** Action enum. */
    enum Action {
        ActionUnknown = 0,
        AgentStateChange = 1,
        AgentStatusChange = 2,
        AgentContactChange = 3,
        AgentOffering = 4,
        AgentMaxNoAnswer = 5,
        AgentBroadcastNumber = 6,
        AgentBridgeStart = 7,
        AgentBridgeEnd = 8,
        AgentBridgeFail = 9,
        MemberStateChange = 19,
        MemberAssignResume = 11,
        MemberAssignStart = 12,
        MemberQueueEnd = 13,
        MsgPop = 14,
        HoldOnEnd = 15
    }
}
