//
// Copyright (c) Microsoft Corporation. All rights reserved.

cpp_quote("/* Copyright (c) Microsoft Corporation. All rights reserved. */")

// callcent.idl : IDL source for tapi3 Call centre support
//

import "oaidl.idl";
import "tapi3if.idl";

typedef enum AGENT_EVENT
{
	AE_NOT_READY,
	AE_READY,
	AE_BUSY_ACD,
	AE_BUSY_INCOMING,
	AE_BUSY_OUTGOING,
	AE_UNKNOWN,

} AGENT_EVENT;


typedef enum AGENT_STATE
{
    AS_NOT_READY,
    AS_READY,
    AS_BUSY_ACD,
    AS_BUSY_INCOMING,
    AS_BUSY_OUTGOING,
    AS_UNKNOWN

}  AGENT_STATE;


typedef enum AGENT_SESSION_EVENT
{
    ASE_NEW_SESSION,
    ASE_NOT_READY,
    ASE_READY,
    ASE_BUSY,
    ASE_WRAPUP, 
    ASE_END

} AGENT_SESSION_EVENT;


typedef enum AGENT_SESSION_STATE
{
	ASST_NOT_READY,
	ASST_READY,
    ASST_BUSY_ON_CALL,
    ASST_BUSY_WRAPUP,
    ASST_SESSION_ENDED

}  AGENT_SESSION_STATE;


typedef enum AGENTHANDLER_EVENT
{
	AHE_NEW_AGENTHANDLER,
	AHE_AGENTHANDLER_REMOVED

} AGENTHANDLER_EVENT;


typedef enum ACDGROUP_EVENT
{
	ACDGE_NEW_GROUP,
	ACDGE_GROUP_REMOVED

} ACDGROUP_EVENT;


typedef enum ACDQUEUE_EVENT
{
    ACDQE_NEW_QUEUE,
	ACDQE_QUEUE_REMOVED

} ACDQUEUE_EVENT;



// forward definitions
interface IEnumAgentSession;
interface IEnumAgent;
interface IEnumQueue;
interface IEnumACDGroup;
interface IEnumAgentHandler;

interface ITAgentHandler;
interface ITAgent;
interface ITAgentSession;
interface ITACDGroup;
interface ITQueue;
interface ITAgentEvent;
interface ITAgentSessionEvent;
interface ITAgentHandlerEvent;
interface ITACDGroupEvent;
interface ITQueueEvent;




// ITAgent
[
   uuid( 5770ECE5-4B27-11d1-BF80-00805FC147D3 ),
   helpstring("TAPI 3.0 ITAgent interface"),
   dual
]

interface ITAgent : IDispatch
{
    [id(1), hidden, helpstring("method EnumerateAgentSessions")]
    HRESULT EnumerateAgentSessions(
            [out, retval] IEnumAgentSession ** ppEnumAgentSession
            );

    [id(2), helpstring("method CreateSession")]
    HRESULT CreateSession(
            [in] ITACDGroup * pACDGroup,
            [in] ITAddress * pAddress,
            [out,retval] ITAgentSession ** ppAgentSession
            );
    [id(3), helpstring("method CreateSessionWithPIN")]
    HRESULT CreateSessionWithPIN(
            [in] ITACDGroup * pACDGroup,
            [in] ITAddress * pAddress,
            [in] BSTR pPIN,
            [out,retval] ITAgentSession ** ppAgentSession
            );

    [propget, id(4), helpstring("property ID")]
    HRESULT ID( 
            [out, retval] BSTR *  ppID 
            );

    [propget, id(5), helpstring("property User")]
    HRESULT User( 
            [out, retval] BSTR *  ppUser
            );

    [propput, id(6), helpstring("property State")]
    HRESULT State(
            [in] AGENT_STATE  AgentState
            );

    [propget, id(6), helpstring("property State")]
    HRESULT State(
            [out, retval] AGENT_STATE * pAgentState
            );

    [propput, id(7), helpstring("property MeasurementPeriod")]
    HRESULT MeasurementPeriod(
            [in] long lPeriod
            );

    [propget, id(7), helpstring("property MeasurementPeriod")]
    HRESULT MeasurementPeriod(
            [out, retval] long * plPeriod
            );

    [propget, id(8), helpstring("property OverallCallRate")]
    HRESULT OverallCallRate(
            [out, retval] CURRENCY * pcyCallrate
            );

    [propget, id(9), helpstring("property NumberOfACDCalls")]
    HRESULT NumberOfACDCalls(
            [out, retval] long * plCalls
            );

    [propget, id(10), helpstring("property NumberOfIncomingCalls")]
    HRESULT NumberOfIncomingCalls(
            [out, retval] long * plCalls
            );

    [propget, id(11), helpstring("property NumberOfOutgoingCalls")]
    HRESULT NumberOfOutgoingCalls(
            [out, retval] long * plCalls
            );

    [propget, id(12), helpstring("property TotalACDTalkTime")]
    HRESULT TotalACDTalkTime(
            [out, retval] long * plTalkTime
            );

    [propget, id(13), helpstring("property TotalACDCallTime")]
    HRESULT TotalACDCallTime(
            [out, retval] long * plCallTime
            );

    [propget, id(14), helpstring("property TotalWrapUpTime")]
    HRESULT TotalWrapUpTime(
            [out, retval] long * plWrapUpTime
            );

    [propget, id(15), helpstring("property AgentSessions")]
    HRESULT AgentSessions( 
            [out, retval] VARIANT * pVariant
            );
            
}




// ITAgentSession
[
   uuid( 5AFC3147-4BCC-11d1-BF80-00805FC147D3 ),
   helpstring("TAPI 3.0 ITAgentSession interface"),
   dual                                                      
]

interface ITAgentSession : IDispatch
{
    [propget, id(1), helpstring("property Agent")]
    HRESULT Agent(
            [out, retval] ITAgent ** ppAgent
            );

    [propget, id(2), helpstring("property Address")]
    HRESULT Address(
            [out, retval] ITAddress ** ppAddress
            );

    [propget, id(3), helpstring("property ACDGroup")]
    HRESULT ACDGroup(
            [out, retval] ITACDGroup ** ppACDGroup
            );
    
    [propput, id(4), helpstring("property State")]
    HRESULT State(
            [in] AGENT_SESSION_STATE  SessionState
            );

    [propget, id(4), helpstring("property State")]
    HRESULT State(
            [out, retval] AGENT_SESSION_STATE * pSessionState
            );

    [propget, id(5), helpstring("property SessionStartTime")]
    HRESULT SessionStartTime(
            [out, retval] DATE * pdateSessionStart
            );

    [propget, id(6), helpstring("property SessionDuration")]
    HRESULT SessionDuration(
            [out, retval] long * plDuration
            );

    [propget, id(7), helpstring("property NumberOfCalls")]
    HRESULT NumberOfCalls(
            [out, retval] long * plCalls
            );

    [propget, id(8), helpstring("property TotalTalkTime")]
    HRESULT TotalTalkTime(
            [out, retval] long * plTalkTime
            );

    [propget, id(9), helpstring("property AverageTalkTime")]
    HRESULT AverageTalkTime(
            [out, retval] long * plTalkTime
            );

    [propget, id(10), helpstring("property TotalCallTime")]
    HRESULT TotalCallTime(
            [out, retval] long * plCallTime
            );

    [propget, id(11), helpstring("property AverageCallTime")]
    HRESULT AverageCallTime(
            [out, retval] long * plCallTime
            );

    [propget, id(12), helpstring("property TotalWrapUpTime")]
    HRESULT TotalWrapUpTime(
            [out, retval] long * plWrapUpTime
            );

    [propget, id(13), helpstring("property AverageWrapUpTime")]
    HRESULT AverageWrapUpTime(
            [out, retval] long * plWrapUpTime
            );

    [propget, id(14), helpstring("property ACDCallRate")]
    HRESULT ACDCallRate(
            [out, retval] CURRENCY * pcyCallrate
            );

    [propget, id(15), helpstring("property LongestTimeToAnswer")]
    HRESULT LongestTimeToAnswer(
            [out, retval] long * plAnswerTime
            );

    [propget, id(16), helpstring("property AverageTimeToAnswer")]
    HRESULT AverageTimeToAnswer(
            [out, retval] long * plAnswerTime
            );


}



// ITACDGroup
[
   uuid( 5AFC3148-4BCC-11d1-BF80-00805FC147D3 ),
   helpstring("TAPI 3.0 ITACDGroup interface"),
   dual
]

interface ITACDGroup : IDispatch
{
    [propget, id(1), helpstring("property Name")]
    HRESULT Name( 
            [out, retval] BSTR *  ppName
            );

    [id(2), hidden, helpstring("method EnumerateQueues")]
    HRESULT EnumerateQueues(
            [out, retval] IEnumQueue ** ppEnumQueue
            );

    [propget, id(3), helpstring("property Queues")]
    HRESULT Queues( 
            [out, retval] VARIANT * pVariant
            );


}


/*
// ITGroupSupervisor
[
   uuid( 587E8C24-9802-11d1-A0A4-00805FC147D3 ),
   helpstring("TAPI 3.0 ITGroupSupervisor interface"),
   dual
]

interface ITGroupSupervisor : IDispatch
{
    [id(1), hidden, helpstring("method EnumerateAgentSessions")]
    HRESULT EnumerateAgentSessions(
            [out, retval] IEnumAgentSession ** ppEnumAgentSession
            );

    [id(2), hidden, helpstring("method EnumerateAgents")]
    HRESULT EnumerateAgents(
            [out, retval] IEnumAgent ** ppEnumAgent
            );
        
    [id(3), helpstring("method RegisterAgentSessionEvents")]
    HRESULT RegisterAgentSessionEvents(
            [in] VARIANT_BOOL bNotify
            );

}
*/


// ITQueue
[
   uuid( 5AFC3149-4BCC-11d1-BF80-00805FC147D3 ),
   helpstring("TAPI 3.0 ITQueue interface"),
   dual
]

interface ITQueue : IDispatch
{
    
    [propput, id(1), helpstring("property MeasurementPeriod")]
    HRESULT MeasurementPeriod(
            [in] long lPeriod
            );

    [propget, id(1), helpstring("property MeasurementPeriod")]
    HRESULT MeasurementPeriod(
            [out, retval] long * plPeriod
            );


    [propget, id(2), helpstring("property TotalCallsQueued")]
    HRESULT TotalCallsQueued(
            [out, retval] long * plCalls
            );

    [propget, id(3), helpstring("property CurrentCallsQueued")]
    HRESULT CurrentCallsQueued(
            [out, retval] long * plCalls
            );
                      
    [propget, id(4), helpstring("property TotalCallsAbandoned")]
    HRESULT TotalCallsAbandoned(
            [out, retval] long * plCalls
            );

    [propget, id(5), helpstring("property TotalCallsFlowedIn")]
    HRESULT TotalCallsFlowedIn(
            [out, retval] long * plCalls
            );

    [propget, id(6), helpstring("property TotalCallsFlowedOut")]
    HRESULT TotalCallsFlowedOut(
            [out, retval] long * plCalls
            );

    [propget, id(7), helpstring("property LongestEverWaitTime")]
    HRESULT LongestEverWaitTime(
            [out, retval] long * plWaitTime
            );

    [propget, id(8), helpstring("property CurrentLongestWaitTime")]
    HRESULT CurrentLongestWaitTime(
            [out, retval] long * plWaitTime
            );

    [propget, id(9), helpstring("property AverageWaitTime")]
    HRESULT AverageWaitTime(
            [out, retval] long * plWaitTime
            );

    [propget, id(10), helpstring("property FinalDisposition")]
    HRESULT FinalDisposition(
            [out, retval] long * plCalls
            );

    [propget, id(11), helpstring("property Name")]
    HRESULT Name( 
            [out, retval] BSTR *  ppName
            );


}




// ITAgentEvent;
[
   uuid( 5AFC314A-4BCC-11d1-BF80-00805FC147D3 ),
   helpstring("TAPI 3.0 ITAgentEvent interface"),
   dual
]

interface ITAgentEvent : IDispatch
{
    [propget, id(1), helpstring("property Agent")]
    HRESULT Agent(
            [out, retval] ITAgent ** ppAgent
            );

    [propget, id(2), helpstring("property Event")]
    HRESULT Event(
            [out, retval] AGENT_EVENT * pEvent
            );


}



// ITAgentSessionEvent;
[
   uuid( 5AFC314B-4BCC-11d1-BF80-00805FC147D3 ),
   helpstring("TAPI 3.0 ITAgentSessionEvent interface"),
   dual
]

interface ITAgentSessionEvent : IDispatch
{
    [propget, id(1), helpstring("property Session")]
    HRESULT Session(
            [out, retval] ITAgentSession ** ppSession
            );

    [propget, id(2), helpstring("property Event")]
    HRESULT Event(
            [out, retval] AGENT_SESSION_EVENT * pEvent
            );


}



// ITACDGroupEvent;
[
   uuid( 297F3032-BD11-11d1-A0A7-00805FC147D3 ),
   helpstring("TAPI 3.0 ITACDGroupEvent interface"),
   dual
]

interface ITACDGroupEvent : IDispatch
{
    [propget, id(1), helpstring("property Group")]
    HRESULT Group(
            [out, retval] ITACDGroup ** ppGroup
            );

    [propget, id(2), helpstring("property Event")]
    HRESULT Event(
            [out, retval] ACDGROUP_EVENT * pEvent
            );                                                                                   


}



// ITQueueEvent;
[
   uuid( 297F3033-BD11-11d1-A0A7-00805FC147D3 ),
   helpstring("TAPI 3.0 ITQueueEvent interface"),
   dual
]

interface ITQueueEvent : IDispatch
{
    [propget, id(1), helpstring("property Queue")]
    HRESULT Queue(
            [out, retval] ITQueue ** ppQueue
            );

    [propget, id(2), helpstring("property Event")]
    HRESULT Event(
            [out, retval] ACDQUEUE_EVENT * pEvent
            );


}



// ITAgentHandlerEvent;
[
   uuid( 297F3034-BD11-11d1-A0A7-00805FC147D3 ),
   helpstring("TAPI 3.0 ITAgentHandlerEvent interface"),
   dual
]

interface ITAgentHandlerEvent : IDispatch
{
    [propget, id(1), helpstring("property AgentHandler")]
    HRESULT AgentHandler(
            [out, retval] ITAgentHandler ** ppAgentHandler
            );

    [propget, id(2), helpstring("property Event")]
    HRESULT Event(
            [out, retval] AGENTHANDLER_EVENT * pEvent
            );


}




// ITTAPICallCenter
[
   uuid( 5AFC3154-4BCC-11d1-BF80-00805FC147D3 ),
   helpstring("TAPI 3.0 ITTAPICallCenter interface"),
   dual
]

interface ITTAPICallCenter : IDispatch
{
    [id(IDISPTAPICALLCENTER | 1), hidden, helpstring("method EnumerateAgentHandlers")]
    HRESULT EnumerateAgentHandlers(
            [out, retval] IEnumAgentHandler ** ppEnumHandler
            );

    [propget, id(IDISPTAPICALLCENTER | 2), helpstring("property AgentHandlers")]
    HRESULT AgentHandlers( 
            [out, retval] VARIANT * pVariant
            );

}


// ITAgentHandler
[
   uuid( 587E8C22-9802-11d1-A0A4-00805FC147D3 ),
   helpstring("TAPI 3.0 ITAgentHandler interface"),
   dual
]

interface ITAgentHandler : IDispatch
{
    [propget, id(1), helpstring("property Name")]
    HRESULT Name( 
            [out, retval] BSTR *  ppName
            );
    
    [id(2), helpstring("property CreateAgent")]
    HRESULT CreateAgent(
            [out, retval] ITAgent ** ppAgent
            );

    [id(3), helpstring("property CreateAgentWithID")]
    HRESULT CreateAgentWithID(
            [in] BSTR pID,
            [in] BSTR pPIN,
            [out, retval] ITAgent ** ppAgent
            );

    [id(4), hidden, helpstring("method EnumerateACDGroups")]
    HRESULT EnumerateACDGroups(
            [out, retval] IEnumACDGroup** ppEnumACDGroup
            );

    [id(5), hidden, helpstring("method EnumerateUsableAddresses")]
    HRESULT EnumerateUsableAddresses(
            [out, retval] IEnumAddress ** ppEnumAddress
            );

    [propget, id(6), helpstring("property ACDGroups")]
    HRESULT ACDGroups( 
            [out, retval] VARIANT * pVariant
            );

    [propget, id(7), helpstring("property UsableAddresses")]
    HRESULT UsableAddresses( 
            [out, retval] VARIANT * pVariant
            );

}


/*
// ITAgentSupervisor
[
   uuid( 587E8C26-9802-11d1-A0A4-00805FC147D3 ),
   helpstring("TAPI 3.0 ITAgentSupervisor interface"),
   dual
]

interface ITAgentSupervisor : IDispatch
{
    [id(1), hidden, helpstring("method EnumerateQueues")]
    HRESULT EnumerateQueues(
            [out, retval] IEnumQueue ** ppEnumQueue
            );

    [id(2), hidden, helpstring("method EnumerateAgents")]
    HRESULT EnumerateAgents(
            [out, retval] IEnumAgent ** ppEnumAgent
            );

}
*/




// IEnumAgent
[
    uuid( 5AFC314D-4BCC-11d1-BF80-00805FC147D3 ),
    helpstring("TAPI 3.0 IEnumAgent interface"),
    hidden,
    pointer_default(unique)
]
    
interface IEnumAgent : IUnknown
{

    HRESULT Next(
            [in] ULONG celt,
            [out] ITAgent ** ppElements,
            [out] ULONG * pceltFetched
            );

    HRESULT Reset( void );

    HRESULT Skip (
            [in] ULONG celt
            );

    HRESULT Clone (
            [out, retval] IEnumAgent ** ppEnum
            );
}



// IEnumAgentSession
[
    uuid( 5AFC314E-4BCC-11d1-BF80-00805FC147D3 ),
    helpstring("TAPI 3.0 IEnumAgentSession interface"),
    hidden,
    pointer_default(unique)
]
    
interface IEnumAgentSession : IUnknown
{

    HRESULT Next(
            [in] ULONG celt,
            [out] ITAgentSession ** ppElements,
            [out] ULONG * pceltFetched
            );

    HRESULT Reset( void );

    HRESULT Skip (
            [in] ULONG celt
            );

    HRESULT Clone (
            [out, retval] IEnumAgentSession ** ppEnum
            );
}



// IEnumQueue;
[
    uuid( 5AFC3158-4BCC-11d1-BF80-00805FC147D3 ),
    helpstring("TAPI 3.0 IEnumQueue interface"),
    hidden,
    pointer_default(unique)
]
    
interface IEnumQueue : IUnknown
{

    HRESULT Next(
            [in] ULONG celt,
            [out] ITQueue ** ppElements,
            [out] ULONG * pceltFetched
            );

    HRESULT Reset( void );

    HRESULT Skip (
            [in] ULONG celt
            );

    HRESULT Clone (
            [out, retval] IEnumQueue ** ppEnum
            );
}




// IEnumACDGroup
[
    uuid( 5AFC3157-4BCC-11d1-BF80-00805FC147D3 ),
    helpstring("TAPI 3.0 IEnumACDGroup interface"),
    hidden,
    pointer_default(unique)
]
    
interface IEnumACDGroup : IUnknown
{

    HRESULT Next(
            [in] ULONG celt,
            [out] ITACDGroup ** ppElements,
            [out] ULONG * pceltFetched
            );

    HRESULT Reset( void );

    HRESULT Skip (
            [in] ULONG celt
            );
                          
    HRESULT Clone (
            [out, retval] IEnumACDGroup ** ppEnum
            );
}



// IEnumAgentHandler
[
    uuid( 587E8C28-9802-11d1-A0A4-00805FC147D3 ),
    helpstring("TAPI 3.0 IEnumAgentHandler interface"),
    hidden,
    pointer_default(unique)
]
    
interface IEnumAgentHandler : IUnknown
{

    HRESULT Next(
            [in] ULONG celt,
            [out] ITAgentHandler ** ppElements,
            [out] ULONG * pceltFetched
            );

    HRESULT Reset( void );

    HRESULT Skip (
            [in] ULONG celt
            );

    HRESULT Clone (
            [out, retval] IEnumAgentHandler ** ppEnum
            );
}





