//
// 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.Security.Credentials.idl";

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

        apicontract UniversalApiContract;

        runtimeclass Uri;
    }
}
namespace Windows
{
    namespace Security
    {
        namespace Credentials
        {
            runtimeclass PasswordCredential;
        }
    }
}
namespace Windows
{
    namespace ApplicationModel
    {
        namespace UserDataAccounts
        {
            namespace SystemAccess
            {
                typedef enum DeviceAccountAuthenticationType DeviceAccountAuthenticationType;

                typedef enum DeviceAccountIconId DeviceAccountIconId;

                typedef enum DeviceAccountMailAgeFilter DeviceAccountMailAgeFilter;

                typedef enum DeviceAccountServerType DeviceAccountServerType;

                typedef enum DeviceAccountSyncScheduleKind DeviceAccountSyncScheduleKind;

                interface IDeviceAccountConfiguration;

                interface IDeviceAccountConfiguration2;

                interface IUserDataAccountSystemAccessManagerStatics;

                interface IUserDataAccountSystemAccessManagerStatics2;

                runtimeclass DeviceAccountConfiguration;

                runtimeclass UserDataAccountSystemAccessManager;
            }
        }
    }
}

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

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

                    interface Windows.Foundation.IAsyncOperation<Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountConfiguration*>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace ApplicationModel
    {
        namespace UserDataAccounts
        {
            namespace SystemAccess
            {
                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                enum DeviceAccountAuthenticationType
                {
                    Basic        = 0,
                    OAuth        = 1,
                    SingleSignOn = 2
                };

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                enum DeviceAccountIconId
                {
                    Exchange = 0,
                    Msa      = 1,
                    Outlook  = 2,
                    Generic  = 3
                };

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                enum DeviceAccountMailAgeFilter
                {
                    All        = 0,
                    Last1Day   = 1,
                    Last3Days  = 2,
                    Last7Days  = 3,
                    Last14Days = 4,
                    Last30Days = 5,
                    Last90Days = 6
                };

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                enum DeviceAccountServerType
                {
                    Exchange = 0,
                    Pop      = 1,
                    Imap     = 2
                };

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                enum DeviceAccountSyncScheduleKind
                {
                    Manual         = 0,
                    Every15Minutes = 1,
                    Every30Minutes = 2,
                    Every60Minutes = 3,
                    Every2Hours    = 4,
                    Daily          = 5,
                    AsItemsArrive  = 6
                };

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountConfiguration)]
                [uuid(AD0123A3-FBDC-4D1B-BE43-5A27EA4A1B63)]
                interface IDeviceAccountConfiguration : IInspectable
                {
                    [propget] HRESULT AccountName([out] [retval] HSTRING* value);
                    [propput] HRESULT AccountName([in] HSTRING value);
                    [propget] HRESULT DeviceAccountTypeId([out] [retval] HSTRING* value);
                    [propput] HRESULT DeviceAccountTypeId([in] HSTRING value);
                    [propget] HRESULT ServerType([out] [retval] Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountServerType* value);
                    [propput] HRESULT ServerType([in] Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountServerType value);
                    [propget] HRESULT EmailAddress([out] [retval] HSTRING* value);
                    [propput] HRESULT EmailAddress([in] HSTRING value);
                    [propget] HRESULT Domain([out] [retval] HSTRING* value);
                    [propput] HRESULT Domain([in] HSTRING value);
                    [propget] HRESULT EmailSyncEnabled([out] [retval] boolean* value);
                    [propput] HRESULT EmailSyncEnabled([in] boolean value);
                    [propget] HRESULT ContactsSyncEnabled([out] [retval] boolean* value);
                    [propput] HRESULT ContactsSyncEnabled([in] boolean value);
                    [propget] HRESULT CalendarSyncEnabled([out] [retval] boolean* value);
                    [propput] HRESULT CalendarSyncEnabled([in] boolean value);
                    [propget] HRESULT IncomingServerAddress([out] [retval] HSTRING* value);
                    [propput] HRESULT IncomingServerAddress([in] HSTRING value);
                    [propget] HRESULT IncomingServerPort([out] [retval] INT32* value);
                    [propput] HRESULT IncomingServerPort([in] INT32 value);
                    [propget] HRESULT IncomingServerRequiresSsl([out] [retval] boolean* value);
                    [propput] HRESULT IncomingServerRequiresSsl([in] boolean value);
                    [propget] HRESULT IncomingServerUsername([out] [retval] HSTRING* value);
                    [propput] HRESULT IncomingServerUsername([in] HSTRING value);
                    [propget] HRESULT OutgoingServerAddress([out] [retval] HSTRING* value);
                    [propput] HRESULT OutgoingServerAddress([in] HSTRING value);
                    [propget] HRESULT OutgoingServerPort([out] [retval] INT32* value);
                    [propput] HRESULT OutgoingServerPort([in] INT32 value);
                    [propget] HRESULT OutgoingServerRequiresSsl([out] [retval] boolean* value);
                    [propput] HRESULT OutgoingServerRequiresSsl([in] boolean value);
                    [propget] HRESULT OutgoingServerUsername([out] [retval] HSTRING* value);
                    [propput] HRESULT OutgoingServerUsername([in] HSTRING value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [exclusiveto(Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountConfiguration)]
                [uuid(F2B2E5A6-728D-4A4A-8945-2BF8580136DE)]
                interface IDeviceAccountConfiguration2 : IInspectable
                {
                    [propget] HRESULT IncomingServerCredential([out] [retval] Windows.Security.Credentials.PasswordCredential** value);
                    [propput] HRESULT IncomingServerCredential([in] Windows.Security.Credentials.PasswordCredential* value);
                    [propget] HRESULT OutgoingServerCredential([out] [retval] Windows.Security.Credentials.PasswordCredential** value);
                    [propput] HRESULT OutgoingServerCredential([in] Windows.Security.Credentials.PasswordCredential* value);
                    [propget] HRESULT OAuthRefreshToken([out] [retval] HSTRING* value);
                    [propput] HRESULT OAuthRefreshToken([in] HSTRING value);
                    [propget] HRESULT IsExternallyManaged([out] [retval] boolean* value);
                    [propput] HRESULT IsExternallyManaged([in] boolean value);
                    [propget] HRESULT AccountIconId([out] [retval] Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountIconId* value);
                    [propput] HRESULT AccountIconId([in] Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountIconId value);
                    [propget] HRESULT AuthenticationType([out] [retval] Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountAuthenticationType* value);
                    [propput] HRESULT AuthenticationType([in] Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountAuthenticationType value);
                    [propget] HRESULT IsSsoAuthenticationSupported([out] [retval] boolean* value);
                    [propget] HRESULT SsoAccountId([out] [retval] HSTRING* value);
                    [propput] HRESULT SsoAccountId([in] HSTRING value);
                    [propget] HRESULT AlwaysDownloadFullMessage([out] [retval] boolean* value);
                    [propput] HRESULT AlwaysDownloadFullMessage([in] boolean value);
                    [propget] HRESULT DoesPolicyAllowMailSync([out] [retval] boolean* value);
                    [propget] HRESULT SyncScheduleKind([out] [retval] Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountSyncScheduleKind* value);
                    [propput] HRESULT SyncScheduleKind([in] Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountSyncScheduleKind value);
                    [propget] HRESULT MailAgeFilter([out] [retval] Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountMailAgeFilter* value);
                    [propput] HRESULT MailAgeFilter([in] Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountMailAgeFilter value);
                    [propget] HRESULT IsClientAuthenticationCertificateRequired([out] [retval] boolean* value);
                    [propput] HRESULT IsClientAuthenticationCertificateRequired([in] boolean value);
                    [propget] HRESULT AutoSelectAuthenticationCertificate([out] [retval] boolean* value);
                    [propput] HRESULT AutoSelectAuthenticationCertificate([in] boolean value);
                    [propget] HRESULT AuthenticationCertificateId([out] [retval] HSTRING* value);
                    [propput] HRESULT AuthenticationCertificateId([in] HSTRING value);
                    [propget] HRESULT CardDavSyncScheduleKind([out] [retval] Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountSyncScheduleKind* value);
                    [propput] HRESULT CardDavSyncScheduleKind([in] Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountSyncScheduleKind value);
                    [propget] HRESULT CalDavSyncScheduleKind([out] [retval] Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountSyncScheduleKind* value);
                    [propput] HRESULT CalDavSyncScheduleKind([in] Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountSyncScheduleKind value);
                    [propget] HRESULT CardDavServerUrl([out] [retval] Windows.Foundation.Uri** value);
                    [propput] HRESULT CardDavServerUrl([in] Windows.Foundation.Uri* value);
                    [propget] HRESULT CardDavRequiresSsl([out] [retval] boolean* value);
                    [propput] HRESULT CardDavRequiresSsl([in] boolean value);
                    [propget] HRESULT CalDavServerUrl([out] [retval] Windows.Foundation.Uri** value);
                    [propput] HRESULT CalDavServerUrl([in] Windows.Foundation.Uri* value);
                    [propget] HRESULT CalDavRequiresSsl([out] [retval] boolean* value);
                    [propput] HRESULT CalDavRequiresSsl([in] boolean value);
                    [propget] HRESULT WasModifiedByUser([out] [retval] boolean* value);
                    [propput] HRESULT WasModifiedByUser([in] boolean value);
                    [propget] HRESULT WasIncomingServerCertificateHashConfirmed([out] [retval] boolean* value);
                    [propput] HRESULT WasIncomingServerCertificateHashConfirmed([in] boolean value);
                    [propget] HRESULT IncomingServerCertificateHash([out] [retval] HSTRING* value);
                    [propput] HRESULT IncomingServerCertificateHash([in] HSTRING value);
                    [propget] HRESULT IsOutgoingServerAuthenticationRequired([out] [retval] boolean* value);
                    [propput] HRESULT IsOutgoingServerAuthenticationRequired([in] boolean value);
                    [propget] HRESULT IsOutgoingServerAuthenticationEnabled([out] [retval] boolean* value);
                    [propput] HRESULT IsOutgoingServerAuthenticationEnabled([in] boolean value);
                    [propget] HRESULT WasOutgoingServerCertificateHashConfirmed([out] [retval] boolean* value);
                    [propput] HRESULT WasOutgoingServerCertificateHashConfirmed([in] boolean value);
                    [propget] HRESULT OutgoingServerCertificateHash([out] [retval] HSTRING* value);
                    [propput] HRESULT OutgoingServerCertificateHash([in] HSTRING value);
                    [propget] HRESULT IsSyncScheduleManagedBySystem([out] [retval] boolean* value);
                    [propput] HRESULT IsSyncScheduleManagedBySystem([in] boolean value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [exclusiveto(Windows.ApplicationModel.UserDataAccounts.SystemAccess.UserDataAccountSystemAccessManager)]
                [uuid(9D6B11B9-CBE5-45F5-822B-C267B81DBDB6)]
                interface IUserDataAccountSystemAccessManagerStatics : IInspectable
                {
                    HRESULT AddAndShowDeviceAccountsAsync([in] Windows.Foundation.Collections.IIterable<Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountConfiguration*>* accounts, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Foundation.Collections.IVectorView<HSTRING>*>** result);
                }

                [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                [exclusiveto(Windows.ApplicationModel.UserDataAccounts.SystemAccess.UserDataAccountSystemAccessManager)]
                [uuid(943F854D-4B4E-439F-83D3-979B27C05AC7)]
                interface IUserDataAccountSystemAccessManagerStatics2 : IInspectable
                {
                    HRESULT SuppressLocalAccountWithAccountAsync([in] HSTRING userDataAccountId, [out] [retval] Windows.Foundation.IAsyncAction** result);
                    HRESULT CreateDeviceAccountAsync([in] Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountConfiguration* account, [out] [retval] Windows.Foundation.IAsyncOperation<HSTRING>** result);
                    HRESULT DeleteDeviceAccountAsync([in] HSTRING accountId, [out] [retval] Windows.Foundation.IAsyncAction** result);
                    HRESULT GetDeviceAccountConfigurationAsync([in] HSTRING accountId, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.ApplicationModel.UserDataAccounts.SystemAccess.DeviceAccountConfiguration*>** result);
                }

                [activatable(Windows.Foundation.UniversalApiContract, 1.0)]
                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass DeviceAccountConfiguration
                {
                    [default] interface Windows.ApplicationModel.UserDataAccounts.SystemAccess.IDeviceAccountConfiguration;
                    [contract(Windows.Foundation.UniversalApiContract, 3.0)] interface Windows.ApplicationModel.UserDataAccounts.SystemAccess.IDeviceAccountConfiguration2;
                }

                [contract(Windows.Foundation.UniversalApiContract, 1.0)]
                [marshaling_behavior(agile)]
                [static(Windows.ApplicationModel.UserDataAccounts.SystemAccess.IUserDataAccountSystemAccessManagerStatics, Windows.Foundation.UniversalApiContract, 1.0)]
                [static(Windows.ApplicationModel.UserDataAccounts.SystemAccess.IUserDataAccountSystemAccessManagerStatics2, Windows.Foundation.UniversalApiContract, 3.0)]
                [threading(both)]
                runtimeclass UserDataAccountSystemAccessManager
                {
                }
            }
        }
    }
}
