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

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";
import "Windows.System.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        interface IAsyncAction;

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace System
    {
        runtimeclass User;
    }
}
namespace Windows
{
    namespace Security
    {
        namespace Authentication
        {
            namespace OnlineId
            {
                typedef enum CredentialPromptType CredentialPromptType;

                typedef enum OnlineIdSystemTicketStatus OnlineIdSystemTicketStatus;

                interface IOnlineIdAuthenticator;

                interface IOnlineIdServiceTicket;

                interface IOnlineIdServiceTicketRequest;

                interface IOnlineIdServiceTicketRequestFactory;

                interface IOnlineIdSystemAuthenticatorForUser;

                interface IOnlineIdSystemAuthenticatorStatics;

                interface IOnlineIdSystemIdentity;

                interface IOnlineIdSystemTicketResult;

                interface IUserIdentity;

                runtimeclass OnlineIdAuthenticator;

                runtimeclass OnlineIdServiceTicket;

                runtimeclass OnlineIdServiceTicketRequest;

                runtimeclass OnlineIdSystemAuthenticator;

                runtimeclass OnlineIdSystemAuthenticatorForUser;

                runtimeclass OnlineIdSystemIdentity;

                runtimeclass OnlineIdSystemTicketResult;

                runtimeclass SignOutUserOperation;

                runtimeclass UserAuthenticationOperation;

                runtimeclass UserIdentity;
            }
        }
    }
}

// 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.OnlineIdSystemTicketResult*>;

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

// Type definition
namespace Windows
{
    namespace Security
    {
        namespace Authentication
        {
            namespace OnlineId
            {
                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                enum CredentialPromptType
                {
                    PromptIfNeeded    = 0,
                    RetypeCredentials = 1,
                    DoNotPrompt       = 2
                };

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                enum OnlineIdSystemTicketStatus
                {
                    Success                = 0,
                    Error                  = 1,
                    ServiceConnectionError = 2
                };

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.Security.Authentication.OnlineId.OnlineIdAuthenticator)]
                [uuid(A003F58A-29AB-4817-B884-D7516DAD18B9)]
                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);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.Security.Authentication.OnlineId.OnlineIdServiceTicket)]
                [uuid(C95C547F-D781-4A94-ACB8-C59874238C26)]
                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);
                }

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

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

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.Security.Authentication.OnlineId.OnlineIdSystemAuthenticatorForUser)]
                [uuid(5798BEFB-1DE4-4186-A2E6-B563F86AAF44)]
                interface IOnlineIdSystemAuthenticatorForUser : IInspectable
                {
                    [overload("GetTicketAsync")] HRESULT GetTicketAsync([in] Windows.Security.Authentication.OnlineId.OnlineIdServiceTicketRequest* request, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.Authentication.OnlineId.OnlineIdSystemTicketResult*>** operation);
                    [propput] HRESULT ApplicationId([in] GUID value);
                    [propget] HRESULT ApplicationId([out] [retval] GUID* value);
                    [propget] HRESULT User([out] [retval] Windows.System.User** user);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.Security.Authentication.OnlineId.OnlineIdSystemAuthenticator)]
                [uuid(85047792-F634-41E3-96A4-5164E902C740)]
                interface IOnlineIdSystemAuthenticatorStatics : IInspectable
                {
                    [propget] HRESULT Default([out] [retval] Windows.Security.Authentication.OnlineId.OnlineIdSystemAuthenticatorForUser** value);
                    HRESULT GetForUser([in] Windows.System.User* user, [out] [retval] Windows.Security.Authentication.OnlineId.OnlineIdSystemAuthenticatorForUser** value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.Security.Authentication.OnlineId.OnlineIdSystemIdentity)]
                [uuid(743CD20D-B6CA-434D-8124-53EA12685307)]
                interface IOnlineIdSystemIdentity : IInspectable
                {
                    [propget] HRESULT Ticket([out] [retval] Windows.Security.Authentication.OnlineId.OnlineIdServiceTicket** value);
                    [propget] HRESULT Id([out] [retval] HSTRING* value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.Security.Authentication.OnlineId.OnlineIdSystemTicketResult)]
                [uuid(DB0A5FF8-B098-4ACD-9D13-9E640652B5B6)]
                interface IOnlineIdSystemTicketResult : IInspectable
                {
                    [propget] HRESULT Identity([out] [retval] Windows.Security.Authentication.OnlineId.OnlineIdSystemIdentity** value);
                    [propget] HRESULT Status([out] [retval] Windows.Security.Authentication.OnlineId.OnlineIdSystemTicketStatus* value);
                    [propget] HRESULT ExtendedError([out] [retval] HRESULT* value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.Security.Authentication.OnlineId.UserIdentity)]
                [uuid(2146D9CD-0742-4BE3-8A1C-7C7AE679AA88)]
                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);
                }

                [activatable(Windows.Foundation.UniversalApiContract, 1.0)]
                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass OnlineIdAuthenticator
                {
                    [default] interface Windows.Security.Authentication.OnlineId.IOnlineIdAuthenticator;
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass OnlineIdServiceTicket
                {
                    [default] interface Windows.Security.Authentication.OnlineId.IOnlineIdServiceTicket;
                }

                [activatable(Windows.Security.Authentication.OnlineId.IOnlineIdServiceTicketRequestFactory, Windows.Foundation.UniversalApiContract, 1.0)]
                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass OnlineIdServiceTicketRequest
                {
                    [default] interface Windows.Security.Authentication.OnlineId.IOnlineIdServiceTicketRequest;
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [marshaling_behavior(agile)]
                [static(Windows.Security.Authentication.OnlineId.IOnlineIdSystemAuthenticatorStatics, Windows.Foundation.UniversalApiContract, 4.0)]
                [threading(both)]
                runtimeclass OnlineIdSystemAuthenticator
                {
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass OnlineIdSystemAuthenticatorForUser
                {
                    [default] interface Windows.Security.Authentication.OnlineId.IOnlineIdSystemAuthenticatorForUser;
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass OnlineIdSystemIdentity
                {
                    [default] interface Windows.Security.Authentication.OnlineId.IOnlineIdSystemIdentity;
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass OnlineIdSystemTicketResult
                {
                    [default] interface Windows.Security.Authentication.OnlineId.IOnlineIdSystemTicketResult;
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass SignOutUserOperation
                {
                    [default] interface Windows.Foundation.IAsyncAction;
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass UserAuthenticationOperation
                {
                    [default] interface Windows.Foundation.IAsyncOperation<Windows.Security.Authentication.OnlineId.UserIdentity*>;
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                runtimeclass UserIdentity
                {
                    [default] interface Windows.Security.Authentication.OnlineId.IUserIdentity;
                }
            }
        }
    }
}
