#ifndef AEEMPMULTI_H
#define AEEMPMULTI_H

/*============================================================================
FILE: AEEMpMulti.h

SERVICES:  BREW Interactive Multimedia Player Services

DESCRIPTION:
   This file defines an abstract interface for BREW Interactive Multimedia Player.

PUBLIC CLASSES:  Not Applicable

INITIALIZATION AND SEQUENCING REQUIREMENTS:  Not Applicable

============================================================================*/
/*===============================================================================
    INCLUDES AND VARIABLE DEFINITIONS
===============================================================================*/
/*-------------------------------------------------------------------
      Include Files
-------------------------------------------------------------------*/
#include "AEE.h"
#include "AEEMpUtil.h"

/*-------------------------------------------------------------------
      Defines
-------------------------------------------------------------------*/

/*-------------------------------------------------------------------
      Type Declarations
-------------------------------------------------------------------*/
// Define interface pointers
typedef struct _IMPMulti    IMPMulti;

//===============================================================================
// FUNCTION DECLARATIONS and INLINE FUNCTION DEFINITIONS
//===============================================================================
#define AEE_MPMULTI_URL_MAX          256+2


#define AEE_MPMULTI_KIND_KMF         1
#define AEE_MPMULTI_KIND_KPL         2
#define AEE_MPMULTI_KIND_OTHER       3
// PTX808IMP_MSA add 2006.1.12 ooshima if1
#define AEE_MPMULTI_KIND_MSA        16
// PTX808IMP_MSA add 2006.1.12 ooshimaendif

#define AEE_MPMULTI_MMID_SIZE_MAX    16


typedef struct _AEEMPMultiUrlInfo{
    char       cEZMusic_Top[AEE_MPMULTI_URL_MAX];
    char       cEZMusic_Hornet[AEE_MPMULTI_URL_MAX];
    char       cEZMusic_Community[AEE_MPMULTI_URL_MAX];
} AEEMPMultiUrlInfo;


typedef struct _AEEMPMultiFileInfo{
    uint16     nKind;
    char       ucMmid[AEE_MPMULTI_MMID_SIZE_MAX];
    uint16     nPlayListNum;
} AEEMPMultiFileInfo;

typedef struct _AEEMPMultiResInfo {
   uint16      wLang;
   uint16      wTaste;
} AEEMPMultiResInfo;

typedef struct _AEEMPMultiCmdNotify {
    IMPMulti *          pIMPMulti;           /* Pointer to IMPMulti */
    int                 nCmd;                /* Command code */
    int                 nSubCmd;             /* Sub command code, if any or 0 */
    int                 nStatus;             /* Status code */
    void *              pCmdData;            /* Contains one of the values listed above */
    uint32              dwSize;              /* Size of pCmdData */
} AEEMPMultiCmdNotify;


typedef void (*PFNMPMULTINOTIFY)( void * pUser, AEEMPMultiCmdNotify * pCmdNotify);


// IMPMulti Initialization.
extern void IMPMulti_Init (IShell * ps);
// Constructor and destructor
extern int  IMPMulti_New  (IShell * ps, AEECLSID cls, void ** ppif);
//-------------------------------------------------------------------
// Interface Definitions - C Style
//-------------------------------------------------------------------
/*===========================================================================

                      IEXTDISPMULTI INTERFACE
	
===========================================================================*/
#define INHERIT_IMPMulti(iname) \
   INHERIT_IBase(iname);\
   \
   int               (*RegisterNotify)(iname * po, PFNMPMULTINOTIFY pfnNotify, void * pUser);\
   int               (*SetAutoOff)(iname * po, boolean bAutoOff);\
   int               (*GetUrlInfo)(iname * po, AEEMPMultiUrlInfo *pUrlInfo);\
   int               (*GetResetFlagStatus)(iname * po, uint16 *pwReset);\
   int               (*SetResetFlagStatus)(iname * po, uint16 wReset);\
   int               (*GetFileInfo)(iname * po, char *pszFileName, AEEMPMultiFileInfo *pFileInfo); \
   uint32            (*GetResInfo)(iname * po, AEEMPMultiResInfo *  pResInfo)

QINTERFACE(IMPMulti)
{
   INHERIT_IMPMulti(IMPMulti);
};

#define IMPMULTI_AddRef(p)                          GET_PVTBL(p, IMPMulti)->AddRef(p)
#define IMPMULTI_Release(p)                         GET_PVTBL(p, IMPMulti)->Release(p)
#define IMPMULTI_RegisterNotify(p, f, pd)           GET_PVTBL(p, IMPMulti)->RegisterNotify(p, f, pd)
#define IMPMULTI_SetAutoOff(p, b)                   GET_PVTBL(p, IMPMulti)->SetAutoOff(p, b)
#define IMPMULTI_GetUrlInfo(p, pa)                  GET_PVTBL(p, IMPMulti)->GetUrlInfo(p, pa)
#define IMPMULTI_GetResetFlagStatus(p, pw)          GET_PVTBL(p, IMPMulti)->GetResetFlagStatus(p, pw)
#define IMPMULTI_SetResetFlagStatus(p, w)           GET_PVTBL(p, IMPMulti)->SetResetFlagStatus(p, w)
#define IMPMULTI_GetFileInfo(p, pc, pf)             GET_PVTBL(p, IMPMulti)->GetFileInfo(p, pc, pf)
#define IMPMULTI_GetResInfo(p, pr)                  GET_PVTBL(p, IMPMulti)->GetResInfo(p, pr)


#endif // AEEMPMULTI_H
