/*
*/
#pragma once

#include "ihost.h"
#include <vector>
#include "iuiview.h"
#include "SxApwComPtr.h"
#include "idsource.h"

class __declspec(uuid(CLSID_CSxApwHost_declspec_uuid))
CSxApwHost
:
    public ATL::CComObjectRootEx<CComSingleThreadModel>,
    public ATL::CComCoClass<CSxApwHost, &__uuidof(CSxApwHost)>,
    public ISxApwHost
{
    typedef std::vector<CSxApwComPtr<ISxApwUiView> > Views_t;
    Views_t m_views;

public:

	CSxApwHost() { }

	BEGIN_COM_MAP(CSxApwHost)
		COM_INTERFACE_ENTRY(ISxApwHost)
	END_COM_MAP()

	DECLARE_NO_REGISTRY();

    STDMETHOD(SetDataSource)(
        LPCWSTR datasource
        );

    STDMETHOD(CreateView)(
        LPCWSTR viewstr
        );

    STDMETHOD(DestroyView)(
        LPCWSTR viewstr
        ) { return S_OK; }

    STDMETHOD(RunQuery)(
        LPCWSTR query
        );

	STDMETHOD(OnNextRow)(
        int     nColumns,
		const LPCWSTR columns[]
		);

	STDMETHOD(OnRowCountEstimateAvailable)(
		int
		);

    STDMETHOD(OnQueryDone)(
        ) { return S_OK; }

    STDMETHOD(OnQueryStart)(
        ) { return S_OK; }

    STDMETHOD(InformSchema)(
        const SxApwColumnInfo  rgColumnInfo[],
        int                    nColumnCount
        );

    HRESULT DSQuery(int nDataSourceType, int nViewType, PCWSTR query, HWND hWnd);

	HRESULT Main();

    CSxApwComPtr<ISxApwDataSource>  m_dataSource;
};