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

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";
import "Windows.ApplicationModel.Appointments.idl";
import "Windows.ApplicationModel.Contacts.idl";
import "Windows.ApplicationModel.Email.idl";
import "Windows.ApplicationModel.UserDataTasks.idl";
import "Windows.Storage.Streams.idl";
import "Windows.System.idl";

// Forward Declare
namespace Windows
{
    namespace ApplicationModel
    {
        namespace Appointments
        {
            runtimeclass AppointmentCalendar;
        }
    }
}
namespace Windows
{
    namespace ApplicationModel
    {
        namespace Contacts
        {
            runtimeclass ContactAnnotationList;

            runtimeclass ContactGroup;

            runtimeclass ContactList;
        }
    }
}
namespace Windows
{
    namespace ApplicationModel
    {
        namespace Email
        {
            runtimeclass EmailMailbox;
        }
    }
}
namespace Windows
{
    namespace ApplicationModel
    {
        namespace UserDataTasks
        {
            runtimeclass UserDataTaskList;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        namespace Collections
        {
            interface IPropertySet;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        runtimeclass Deferral;

        interface IAsyncAction;

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Streams
        {
            interface IRandomAccessStreamReference;
        }
    }
}
namespace Windows
{
    namespace System
    {
        runtimeclass User;
    }
}
namespace Windows
{
    namespace ApplicationModel
    {
        namespace UserDataAccounts
        {
            typedef enum UserDataAccountContentKinds UserDataAccountContentKinds;

            typedef enum UserDataAccountOtherAppReadAccess UserDataAccountOtherAppReadAccess;

            typedef enum UserDataAccountStoreAccessType UserDataAccountStoreAccessType;

            interface IUserDataAccount;

            interface IUserDataAccount2;

            interface IUserDataAccount3;

            interface IUserDataAccount4;

            interface IUserDataAccountManagerForUser;

            interface IUserDataAccountManagerStatics;

            interface IUserDataAccountManagerStatics2;

            interface IUserDataAccountStore;

            interface IUserDataAccountStore2;

            interface IUserDataAccountStore3;

            interface IUserDataAccountStoreChangedEventArgs;

            runtimeclass UserDataAccount;

            runtimeclass UserDataAccountManager;

            runtimeclass UserDataAccountManagerForUser;

            runtimeclass UserDataAccountStore;

            runtimeclass UserDataAccountStoreChangedEventArgs;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace ApplicationModel
    {
        namespace UserDataAccounts
        {
            declare
            {
                interface Windows.Foundation.Collections.IIterable<Windows.ApplicationModel.UserDataAccounts.UserDataAccount*>;

                interface Windows.Foundation.Collections.IIterator<Windows.ApplicationModel.UserDataAccounts.UserDataAccount*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.ApplicationModel.UserDataAccounts.UserDataAccount*>;

                interface Windows.Foundation.IAsyncOperation<Windows.ApplicationModel.UserDataAccounts.UserDataAccount*>;

                interface Windows.Foundation.IAsyncOperation<Windows.ApplicationModel.UserDataAccounts.UserDataAccountStore*>;

                interface Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.ApplicationModel.UserDataAccounts.UserDataAccount*>*>;

                interface Windows.Foundation.TypedEventHandler<Windows.ApplicationModel.UserDataAccounts.UserDataAccountStore*, Windows.ApplicationModel.UserDataAccounts.UserDataAccountStoreChangedEventArgs*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace ApplicationModel
    {
        namespace UserDataAccounts
        {
            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [flags]
            enum UserDataAccountContentKinds
            {
                Email       = 0x1,
                Contact     = 0x2,
                Appointment = 0x4
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum UserDataAccountOtherAppReadAccess
            {
                SystemOnly = 0,
                Full       = 1,
                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                None       = 2
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            enum UserDataAccountStoreAccessType
            {
                AllAccountsReadOnly  = 0,
                AppAccountsReadWrite = 1
            };

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.ApplicationModel.UserDataAccounts.UserDataAccount)]
            [uuid(B9C4367E-B348-4910-BE94-4AD4BBA6DEA7)]
            interface IUserDataAccount : IInspectable
            {
                [propget] HRESULT Id([out] [retval] HSTRING* value);
                [propget] HRESULT UserDisplayName([out] [retval] HSTRING* value);
                [propput] HRESULT UserDisplayName([in] HSTRING value);
                [propget] HRESULT OtherAppReadAccess([out] [retval] Windows.ApplicationModel.UserDataAccounts.UserDataAccountOtherAppReadAccess* value);
                [propput] HRESULT OtherAppReadAccess([in] Windows.ApplicationModel.UserDataAccounts.UserDataAccountOtherAppReadAccess value);
                [propget] HRESULT Icon([out] [retval] Windows.Storage.Streams.IRandomAccessStreamReference** value);
                [propget] HRESULT DeviceAccountTypeId([out] [retval] HSTRING* value);
                [propget] HRESULT PackageFamilyName([out] [retval] HSTRING* value);
                HRESULT SaveAsync([out] [retval] Windows.Foundation.IAsyncAction** result);
                HRESULT DeleteAsync([out] [retval] Windows.Foundation.IAsyncAction** result);
                HRESULT FindAppointmentCalendarsAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.ApplicationModel.Appointments.AppointmentCalendar*>*>** result);
                HRESULT FindEmailMailboxesAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.ApplicationModel.Email.EmailMailbox*>*>** result);
                HRESULT FindContactListsAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.ApplicationModel.Contacts.ContactList*>*>** result);
                HRESULT FindContactAnnotationListsAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.ApplicationModel.Contacts.ContactAnnotationList*>*>** result);
            }

            [contract(Windows.Foundation.UniversalApiContract, 2.0)]
            [exclusiveto(Windows.ApplicationModel.UserDataAccounts.UserDataAccount)]
            [uuid(078CD89F-DE82-404B-8195-C8A3AC198F60)]
            interface IUserDataAccount2 : IInspectable
                requires
                    Windows.ApplicationModel.UserDataAccounts.IUserDataAccount
            {
                [propget] HRESULT EnterpriseId([out] [retval] HSTRING* value);
                [propget] HRESULT IsProtectedUnderLock([out] [retval] boolean* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 3.0)]
            [exclusiveto(Windows.ApplicationModel.UserDataAccounts.UserDataAccount)]
            [uuid(01533845-6C43-4286-9D69-3E1709A1F266)]
            interface IUserDataAccount3 : IInspectable
            {
                [propget] HRESULT ExplictReadAccessPackageFamilyNames([out] [retval] Windows.Foundation.Collections.IVector<HSTRING>** value);
                [propget] HRESULT DisplayName([out] [retval] HSTRING* value);
                [propput] HRESULT DisplayName([in] HSTRING value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.ApplicationModel.UserDataAccounts.UserDataAccount)]
            [uuid(C4315210-EAE5-4F0A-A8B2-1CCA115E008F)]
            interface IUserDataAccount4 : IInspectable
            {
                [propget] HRESULT CanShowCreateContactGroup([out] [retval] boolean* value);
                [propput] HRESULT CanShowCreateContactGroup([in] boolean value);
                [propget] HRESULT ProviderProperties([out] [retval] Windows.Foundation.Collections.IPropertySet** value);
                HRESULT FindUserDataTaskListsAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.ApplicationModel.UserDataTasks.UserDataTaskList*>*>** operation);
                HRESULT FindContactGroupsAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.ApplicationModel.Contacts.ContactGroup*>*>** operation);
                HRESULT TryShowCreateContactGroupAsync([out] [retval] Windows.Foundation.IAsyncOperation<HSTRING>** operation);
                [propput] HRESULT IsProtectedUnderLock([in] boolean value);
                [propput] HRESULT Icon([in] Windows.Storage.Streams.IRandomAccessStreamReference* value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 3.0)]
            [exclusiveto(Windows.ApplicationModel.UserDataAccounts.UserDataAccountManagerForUser)]
            [uuid(56A6E8DB-DB8F-41AB-A65F-8C5971AAC982)]
            interface IUserDataAccountManagerForUser : IInspectable
            {
                HRESULT RequestStoreAsync([in] Windows.ApplicationModel.UserDataAccounts.UserDataAccountStoreAccessType storeAccessType, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.ApplicationModel.UserDataAccounts.UserDataAccountStore*>** result);
                [propget] HRESULT User([out] [retval] Windows.System.User** value);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.ApplicationModel.UserDataAccounts.UserDataAccountManager)]
            [uuid(0D9B89EA-1928-4A20-86D5-3C737F7DC3B0)]
            interface IUserDataAccountManagerStatics : IInspectable
            {
                HRESULT RequestStoreAsync([in] Windows.ApplicationModel.UserDataAccounts.UserDataAccountStoreAccessType storeAccessType, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.ApplicationModel.UserDataAccounts.UserDataAccountStore*>** result);
                HRESULT ShowAddAccountAsync([in] Windows.ApplicationModel.UserDataAccounts.UserDataAccountContentKinds contentKinds, [out] [retval] Windows.Foundation.IAsyncOperation<HSTRING>** result);
                HRESULT ShowAccountSettingsAsync([in] HSTRING id, [out] [retval] Windows.Foundation.IAsyncAction** result);
                HRESULT ShowAccountErrorResolverAsync([in] HSTRING id, [out] [retval] Windows.Foundation.IAsyncAction** result);
            }

            [contract(Windows.Foundation.UniversalApiContract, 3.0)]
            [exclusiveto(Windows.ApplicationModel.UserDataAccounts.UserDataAccountManager)]
            [uuid(6A3DED88-316B-435E-B534-F7D4B4B7DBA6)]
            interface IUserDataAccountManagerStatics2 : IInspectable
            {
                HRESULT GetForUser([in] Windows.System.User* user, [out] [retval] Windows.ApplicationModel.UserDataAccounts.UserDataAccountManagerForUser** result);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [exclusiveto(Windows.ApplicationModel.UserDataAccounts.UserDataAccountStore)]
            [uuid(2073B0AD-7D0A-4E76-BF45-2368F978A59A)]
            interface IUserDataAccountStore : IInspectable
            {
                HRESULT FindAccountsAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<Windows.ApplicationModel.UserDataAccounts.UserDataAccount*>*>** result);
                HRESULT GetAccountAsync([in] HSTRING id, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.ApplicationModel.UserDataAccounts.UserDataAccount*>** result);
                HRESULT CreateAccountAsync([in] HSTRING userDisplayName, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.ApplicationModel.UserDataAccounts.UserDataAccount*>** result);
            }

            [contract(Windows.Foundation.UniversalApiContract, 3.0)]
            [exclusiveto(Windows.ApplicationModel.UserDataAccounts.UserDataAccountStore)]
            [uuid(B1E0AEF7-9560-4631-8AF0-061D30161469)]
            interface IUserDataAccountStore2 : IInspectable
                requires
                    Windows.ApplicationModel.UserDataAccounts.IUserDataAccountStore
            {
                [overload("CreateAccountAsync")] HRESULT CreateAccountWithPackageRelativeAppIdAsync([in] HSTRING userDisplayName, [in] HSTRING packageRelativeAppId, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.ApplicationModel.UserDataAccounts.UserDataAccount*>** result);
                [eventadd] HRESULT StoreChanged([in] Windows.Foundation.TypedEventHandler<Windows.ApplicationModel.UserDataAccounts.UserDataAccountStore*, Windows.ApplicationModel.UserDataAccounts.UserDataAccountStoreChangedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT StoreChanged([in] EventRegistrationToken token);
            }

            [contract(Windows.Foundation.UniversalApiContract, 4.0)]
            [exclusiveto(Windows.ApplicationModel.UserDataAccounts.UserDataAccountStore)]
            [uuid(8142C094-F3C9-478B-B117-6585BEBB6789)]
            interface IUserDataAccountStore3 : IInspectable
                requires
                    Windows.ApplicationModel.UserDataAccounts.IUserDataAccountStore
            {
                [overload("CreateAccountAsync")] HRESULT CreateAccountWithPackageRelativeAppIdAndEnterpriseIdAsync([in] HSTRING userDisplayName, [in] HSTRING packageRelativeAppId, [in] HSTRING enterpriseId, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.ApplicationModel.UserDataAccounts.UserDataAccount*>** result);
            }

            [contract(Windows.Foundation.UniversalApiContract, 3.0)]
            [exclusiveto(Windows.ApplicationModel.UserDataAccounts.UserDataAccountStoreChangedEventArgs)]
            [uuid(84E3E2E5-8820-4512-B1F6-2E035BE1072C)]
            interface IUserDataAccountStoreChangedEventArgs : IInspectable
            {
                HRESULT GetDeferral([out] [retval] Windows.Foundation.Deferral** result);
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass UserDataAccount
            {
                [default] interface Windows.ApplicationModel.UserDataAccounts.IUserDataAccount;
                [contract(Windows.Foundation.UniversalApiContract, 2.0)] interface Windows.ApplicationModel.UserDataAccounts.IUserDataAccount2;
                [contract(Windows.Foundation.UniversalApiContract, 3.0)] interface Windows.ApplicationModel.UserDataAccounts.IUserDataAccount3;
                [contract(Windows.Foundation.UniversalApiContract, 4.0)] interface Windows.ApplicationModel.UserDataAccounts.IUserDataAccount4;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [static(Windows.ApplicationModel.UserDataAccounts.IUserDataAccountManagerStatics, Windows.Foundation.UniversalApiContract, 1.0)]
            [static(Windows.ApplicationModel.UserDataAccounts.IUserDataAccountManagerStatics2, Windows.Foundation.UniversalApiContract, 3.0)]
            [threading(both)]
            runtimeclass UserDataAccountManager
            {
            }

            [contract(Windows.Foundation.UniversalApiContract, 3.0)]
            [marshaling_behavior(agile)]
            runtimeclass UserDataAccountManagerForUser
            {
                [default] interface Windows.ApplicationModel.UserDataAccounts.IUserDataAccountManagerForUser;
            }

            [contract(Windows.Foundation.UniversalApiContract, 1.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass UserDataAccountStore
            {
                [default] interface Windows.ApplicationModel.UserDataAccounts.IUserDataAccountStore;
                [contract(Windows.Foundation.UniversalApiContract, 3.0)] interface Windows.ApplicationModel.UserDataAccounts.IUserDataAccountStore2;
                [contract(Windows.Foundation.UniversalApiContract, 4.0)] interface Windows.ApplicationModel.UserDataAccounts.IUserDataAccountStore3;
            }

            [contract(Windows.Foundation.UniversalApiContract, 3.0)]
            [marshaling_behavior(agile)]
            [threading(both)]
            runtimeclass UserDataAccountStoreChangedEventArgs
            {
                [default] interface Windows.ApplicationModel.UserDataAccounts.IUserDataAccountStoreChangedEventArgs;
            }
        }
    }
}
