//+----------------------------------------------------------------------------
// defines SearchFolder data structure
//+----------------------------------------------------------------------------
typedef struct tagSearchFolder
{
    BSTR bstrDisplayName;     // Display name of this folder ex: "foo"
    BSTR bstrPhysicalURL;     // physical url ex: "mail://localhost/bar/blat/foo/"
    BSTR bstrTooltipText;     // Text to display in a folder picker dialog
    DWORD dwAttributes;       // SFGAOF flags
} DesktopSearchFolder;


//+----------------------------------------------------------------------------
//
//  Interface:  IEnumSearchFolder
//
// this defines an interface to return SearchFolder objects
//
//+----------------------------------------------------------------------------
[
    object,
    uuid(9C590DA1-8109-43cf-A2AF-2DB94A0EAF62),
    pointer_default(unique)
]
interface IEnumSearchFolder : IUnknown
{
    typedef [unique] IEnumSearchFolder  *LPENUMFOLDERENTRY;

    HRESULT Next([in] ULONG celt,
                 [out, size_is(celt), length_is(*pceltFetched)] DesktopSearchFolder *rgelt,
                 [out] ULONG *pceltFetched);

    HRESULT Skip([in] ULONG celt);

    HRESULT Reset();

    HRESULT Clone( [out] IEnumSearchFolder **ppenum);
}


//+----------------------------------------------------------------------------
//
//  Interface:  ISearchProtocolOptions
//
//  Comment:    Defines information for a PH to interact with options page
//
//+----------------------------------------------------------------------------
cpp_quote("#define PRTH_E_NO_APPLICATION               ((DWORD)PRTH_E_ACL_TOO_BIG+1)")
cpp_quote("#define PRTH_E_MIN_VERSION                  ((DWORD)PRTH_E_ACL_TOO_BIG+2)")
cpp_quote("#define PRTH_E_NOT_CONFIGURED               ((DWORD)PRTH_E_ACL_TOO_BIG+3)")

[
    object,
    local,
    uuid(3C158646-6AA0-4a43-B4F6-2419E05A7B4B),
    helpstring("ISearchProtocolOptions interface"),
    pointer_default(unique)
]
interface ISearchProtocolOptions : IUnknown
{
    //
    // return user-friendly localized description of requirements for this protocol handler
    // example: "Microsoft Outlook 2000 or greater"
    //
    [helpstring("method GetRequirements")]
    HRESULT GetRequirements([out, retval] BSTR *pbstrDescription);

    // return if the requirements for using the protocol handler are met.
    // this allows a options UI to blank out protocols which are not appropraite based
    // on whatever resource the protocol handler needs
    // return values:
    //  S_OK == everything OK
    //  PRTH_E_NO_APPLICATION = application is not installed
    //  PRTH_E_MIN_VERSION = version is earlier then minimum
    //
    [helpstring("method CheckRequirements")]
    HRESULT CheckRequirements();

    //
    //   EnumSearchFolder
    //
    // Enumerates the sub-folders off of the current item
    // NOT USED YET
    HRESULT EnumSearchFolder([in,string] LPCOLESTR pwszUrl,
                             [out,retval]IEnumSearchFolder **ppEnumSearchFolder);

    HRESULT GetDefaultCrawlScope([in]ISearchCrawlScopeManager *pCrawlScopeManager);
}

