//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0008
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.idl";
// Additional imports to ensure that all required headers are included
cpp_quote("#if defined(__cplusplus)")
cpp_quote("}")
cpp_quote("#endif // defined(__cplusplus)")
cpp_quote("#include <Windows.Foundation.h>")
cpp_quote("#if defined(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        interface IAsyncAction;
    }
}
namespace Windows
{
    namespace Security
    {
        namespace Authentication
        {
            namespace OnlineId
            {
                typedef enum CredentialPromptType CredentialPromptType;

                interface IOnlineIdServiceTicketRequest;

                interface IOnlineIdServiceTicketRequestFactory;

                interface IOnlineIdServiceTicket;

                interface IUserIdentity;

                interface IOnlineIdAuthenticator;

                runtimeclass OnlineIdServiceTicketRequest;

                runtimeclass OnlineIdServiceTicket;

                runtimeclass UserAuthenticationOperation;

                runtimeclass SignOutUserOperation;

                runtimeclass UserIdentity;

                runtimeclass OnlineIdAuthenticator;
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Security
    {
        namespace Authentication
        {
            namespace OnlineId
            {
                declare
                {
                    interface Windows.Foundation.Collections.IIterable<Windows.Security.Authentication.OnlineId.OnlineIdServiceTicket*>;

                    interface Windows.Foundation.Collections.IIterable<Windows.Security.Authentication.OnlineId.OnlineIdServiceTicketRequest*>;

                    interface Windows.Foundation.Collections.IIterator<Windows.Security.Authentication.OnlineId.OnlineIdServiceTicket*>;

                    interface Windows.Foundation.Collections.IIterator<Windows.Security.Authentication.OnlineId.OnlineIdServiceTicketRequest*>;

                    interface Windows.Foundation.Collections.IVectorView<Windows.Security.Authentication.OnlineId.OnlineIdServiceTicket*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Security.Authentication.OnlineId.UserIdentity*>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Security
    {
        namespace Authentication
        {
            namespace OnlineId
            {
                [version(0x06020000)]
                enum CredentialPromptType
                {
                    PromptIfNeeded    = 0,
                    RetypeCredentials = 1,
                    DoNotPrompt       = 2
                };

                [uuid(297445D3-FB63-4135-8909-4E354C061466)]
                [version(0x06020000)]
                [exclusiveto(Windows.Security.Authentication.OnlineId.OnlineIdServiceTicketRequest)]
                interface IOnlineIdServiceTicketRequest : IInspectable
                {
                    [propget] HRESULT Service([out] [retval] HSTRING* value);
                    [propget] HRESULT Policy([out] [retval] HSTRING* value);
                }

                [uuid(BEBB0A08-9E73-4077-9614-08614C0BC245)]
                [exclusiveto(Windows.Security.Authentication.OnlineId.OnlineIdServiceTicketRequest)]
                [version(0x06020000)]
                interface IOnlineIdServiceTicketRequestFactory : IInspectable
                {
                    [overload("CreateOnlineIdServiceTicketRequest")] HRESULT CreateOnlineIdServiceTicketRequest([in] HSTRING service, [in] HSTRING policy, [out] [retval] Windows.Security.Authentication.OnlineId.OnlineIdServiceTicketRequest** onlineIdServiceTicketRequest);
                    [overload("CreateOnlineIdServiceTicketRequest")] HRESULT CreateOnlineIdServiceTicketRequestAdvanced([in] HSTRING service, [out] [retval] Windows.Security.Authentication.OnlineId.OnlineIdServiceTicketRequest** onlineIdServiceTicketRequest);
                }

                [uuid(C95C547F-D781-4A94-ACB8-C59874238C26)]
                [version(0x06020000)]
                [exclusiveto(Windows.Security.Authentication.OnlineId.OnlineIdServiceTicket)]
                interface IOnlineIdServiceTicket : IInspectable
                {
                    [propget] HRESULT Value([out] [retval] HSTRING* value);
                    [propget] HRESULT Request([out] [retval] Windows.Security.Authentication.OnlineId.OnlineIdServiceTicketRequest** value);
                    [propget] HRESULT ErrorCode([out] [retval] INT32* value);
                }

                [uuid(2146D9CD-0742-4BE3-8A1C-7C7AE679AA88)]
                [exclusiveto(Windows.Security.Authentication.OnlineId.UserIdentity)]
                [version(0x06020000)]
                interface IUserIdentity : IInspectable
                {
                    [propget] HRESULT Tickets([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Security.Authentication.OnlineId.OnlineIdServiceTicket*>** value);
                    [propget] HRESULT Id([out] [retval] HSTRING* value);
                    [propget] HRESULT SafeCustomerId([out] [retval] HSTRING* value);
                    [propget] HRESULT SignInName([out] [retval] HSTRING* value);
                    [propget] HRESULT FirstName([out] [retval] HSTRING* value);
                    [propget] HRESULT LastName([out] [retval] HSTRING* value);
                    [propget] HRESULT IsBetaAccount([out] [retval] boolean* value);
                    [propget] HRESULT IsConfirmedPC([out] [retval] boolean* value);
                }

                [uuid(A003F58A-29AB-4817-B884-D7516DAD18B9)]
                [exclusiveto(Windows.Security.Authentication.OnlineId.OnlineIdAuthenticator)]
                [version(0x06020000)]
                interface IOnlineIdAuthenticator : IInspectable
                {
                    [overload("AuthenticateUserAsync")] HRESULT AuthenticateUserAsync([in] Windows.Security.Authentication.OnlineId.OnlineIdServiceTicketRequest* request, [out] [retval] Windows.Security.Authentication.OnlineId.UserAuthenticationOperation** authenticationOperation);
                    [overload("AuthenticateUserAsync")] HRESULT AuthenticateUserAsyncAdvanced([in] Windows.Foundation.Collections.IIterable<Windows.Security.Authentication.OnlineId.OnlineIdServiceTicketRequest*>* requests, [in] Windows.Security.Authentication.OnlineId.CredentialPromptType credentialPromptType, [out] [retval] Windows.Security.Authentication.OnlineId.UserAuthenticationOperation** authenticationOperation);
                    HRESULT SignOutUserAsync([out] [retval] Windows.Security.Authentication.OnlineId.SignOutUserOperation** signOutUserOperation);
                    [propput] HRESULT ApplicationId([in] GUID value);
                    [propget] HRESULT ApplicationId([out] [retval] GUID* value);
                    [propget] HRESULT CanSignOut([out] [retval] boolean* value);
                    [propget] HRESULT AuthenticatedSafeCustomerId([out] [retval] HSTRING* value);
                }

                [marshaling_behavior(agile)]
                [threading(both)]
                [version(0x06020000)]
                [activatable(Windows.Security.Authentication.OnlineId.IOnlineIdServiceTicketRequestFactory, 0x06020000)]
                runtimeclass OnlineIdServiceTicketRequest
                {
                    [default] interface Windows.Security.Authentication.OnlineId.IOnlineIdServiceTicketRequest;
                }

                [marshaling_behavior(agile)]
                [version(0x06020000)]
                runtimeclass OnlineIdServiceTicket
                {
                    [default] interface Windows.Security.Authentication.OnlineId.IOnlineIdServiceTicket;
                }

                [version(0x06020000)]
                [marshaling_behavior(agile)]
                runtimeclass UserAuthenticationOperation
                {
                    [default] interface Windows.Foundation.IAsyncOperation<Windows.Security.Authentication.OnlineId.UserIdentity*>;
                }

                [version(0x06020000)]
                [marshaling_behavior(agile)]
                runtimeclass SignOutUserOperation
                {
                    [default] interface Windows.Foundation.IAsyncAction;
                }

                [version(0x06020000)]
                [marshaling_behavior(agile)]
                runtimeclass UserIdentity
                {
                    [default] interface Windows.Security.Authentication.OnlineId.IUserIdentity;
                }

                [marshaling_behavior(agile)]
                [version(0x06020000)]
                [activatable(0x06020000)]
                [threading(both)]
                runtimeclass OnlineIdAuthenticator
                {
                    [default] interface Windows.Security.Authentication.OnlineId.IOnlineIdAuthenticator;
                }
            }
        }
    }
}
