#ifndef __WINE_DXDIAGN_PRIVATE_H
#define __WINE_DXDIAGN_PRIVATE_H

#include "dxdiag.h"

typedef struct IDxDiagProviderImpl IDxDiagProviderImpl;
typedef struct IDxDiagContainerImpl IDxDiagContainerImpl;

struct IDxDiagProviderImpl
{
    /* IUnknown fields */
    ICOM_VFIELD(IDxDiagProvider);
    DWORD ref;
    /* IDxDiagProvier fields */
    BOOL initilized;
};

typedef struct
{
    WCHAR *pwszContainerName;
    IDxDiagContainerImpl *pContainer;
} Container_SubContainer;

typedef struct
{
    WCHAR *pwszPropName;
    /* not quite the same as the variant ones..
     * because variants can't seem to be created statically..
     * so this can, then the GetProp thing will convert
     * the contents to variants. also since we static init the things,
     * they can't be in unions. :( */
    enum { DXD_EMPTY, DXD_DWORD, DXD_INT, DXD_ULL, DXD_LONG, DXD_BOOL, DXD_STR } varType;
    DWORD  dw;
    INT    i;
    WCHAR* ull;
    LONG   l;
    BOOL   b;
    WCHAR* psz;
} Container_Property;

struct IDxDiagContainerImpl
{
    /* IUnknown fields */
    ICOM_VFIELD(IDxDiagContainer);
    DWORD ref;
    /* IDxDiagContainer fields */
    Container_SubContainer* scContainers;
    Container_Property* pProperties;
};

/* provider.c */
HRESULT DXDIAGN_CreateDxDiagProvider(IUnknown *pOuter, REFIID riid, LPVOID *ppobj);

#endif /* __WINE_DXDIAGN_PRIVATE_H */

