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

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        typedef struct DateTime DateTime;

        typedef struct TimeSpan TimeSpan;
    }
}
namespace Windows
{
    namespace System
    {
        apicontract SystemManagementContract;
    }
}
namespace Windows
{
    namespace System
    {
        namespace Update
        {
            typedef enum SystemUpdateAttentionRequiredReason SystemUpdateAttentionRequiredReason;

            typedef enum SystemUpdateItemState SystemUpdateItemState;

            typedef enum SystemUpdateManagerState SystemUpdateManagerState;

            typedef enum SystemUpdateStartInstallAction SystemUpdateStartInstallAction;

            interface ISystemUpdateItem;

            interface ISystemUpdateLastErrorInfo;

            interface ISystemUpdateManagerStatics;

            runtimeclass SystemUpdateItem;

            runtimeclass SystemUpdateLastErrorInfo;

            runtimeclass SystemUpdateManager;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace System
    {
        namespace Update
        {
            declare
            {
                interface Windows.Foundation.Collections.IIterable<Windows.System.Update.SystemUpdateItem*>;

                interface Windows.Foundation.Collections.IIterator<Windows.System.Update.SystemUpdateItem*>;

                interface Windows.Foundation.Collections.IVectorView<Windows.System.Update.SystemUpdateItem*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace System
    {
        namespace Update
        {
            [contract(Windows.System.SystemManagementContract, 6.0)]
            enum SystemUpdateAttentionRequiredReason
            {
                None                  = 0,
                NetworkRequired       = 1,
                InsufficientDiskSpace = 2,
                InsufficientBattery   = 3,
                UpdateBlocked         = 4
            };

            [contract(Windows.System.SystemManagementContract, 6.0)]
            enum SystemUpdateItemState
            {
                NotStarted     = 0,
                Initializing   = 1,
                Preparing      = 2,
                Calculating    = 3,
                Downloading    = 4,
                Installing     = 5,
                Completed      = 6,
                RebootRequired = 7,
                Error          = 8
            };

            [contract(Windows.System.SystemManagementContract, 6.0)]
            enum SystemUpdateManagerState
            {
                Idle              = 0,
                Detecting         = 1,
                ReadyToDownload   = 2,
                Downloading       = 3,
                ReadyToInstall    = 4,
                Installing        = 5,
                RebootRequired    = 6,
                ReadyToFinalize   = 7,
                Finalizing        = 8,
                Completed         = 9,
                AttentionRequired = 10,
                Error             = 11
            };

            [contract(Windows.System.SystemManagementContract, 6.0)]
            enum SystemUpdateStartInstallAction
            {
                UpToReboot  = 0,
                AllowReboot = 1
            };

            [contract(Windows.System.SystemManagementContract, 6.0)]
            [exclusiveto(Windows.System.Update.SystemUpdateItem)]
            [uuid(779740EB-5624-519E-A8E2-09E9173B3FB7)]
            interface ISystemUpdateItem : IInspectable
            {
                [propget] HRESULT State([out] [retval] Windows.System.Update.SystemUpdateItemState* value);
                [propget] HRESULT Title([out] [retval] HSTRING* value);
                [propget] HRESULT Description([out] [retval] HSTRING* value);
                [propget] HRESULT Id([out] [retval] HSTRING* value);
                [propget] HRESULT Revision([out] [retval] UINT32* value);
                [propget] HRESULT DownloadProgress([out] [retval] DOUBLE* value);
                [propget] HRESULT InstallProgress([out] [retval] DOUBLE* value);
                [propget] HRESULT ExtendedError([out] [retval] HRESULT* value);
            }

            [contract(Windows.System.SystemManagementContract, 6.0)]
            [exclusiveto(Windows.System.Update.SystemUpdateLastErrorInfo)]
            [uuid(7EE887F7-8A44-5B6E-BD07-7AECE4116EA9)]
            interface ISystemUpdateLastErrorInfo : IInspectable
            {
                [propget] HRESULT State([out] [retval] Windows.System.Update.SystemUpdateManagerState* value);
                [propget] HRESULT ExtendedError([out] [retval] HRESULT* value);
                [propget] HRESULT IsInteractive([out] [retval] boolean* value);
            }

            [contract(Windows.System.SystemManagementContract, 6.0)]
            [exclusiveto(Windows.System.Update.SystemUpdateManager)]
            [uuid(B2D3FCEF-2971-51BE-B41A-8BD703BB701A)]
            interface ISystemUpdateManagerStatics : IInspectable
            {
                HRESULT IsSupported([out] [retval] boolean* result);
                [propget] HRESULT State([out] [retval] Windows.System.Update.SystemUpdateManagerState* value);
                [eventadd] HRESULT StateChanged([in] Windows.Foundation.EventHandler<IInspectable*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT StateChanged([in] EventRegistrationToken token);
                [propget] HRESULT DownloadProgress([out] [retval] DOUBLE* value);
                [propget] HRESULT InstallProgress([out] [retval] DOUBLE* value);
                [propget] HRESULT UserActiveHoursStart([out] [retval] Windows.Foundation.TimeSpan* value);
                [propget] HRESULT UserActiveHoursEnd([out] [retval] Windows.Foundation.TimeSpan* value);
                [propget] HRESULT UserActiveHoursMax([out] [retval] INT32* value);
                HRESULT TrySetUserActiveHours([in] Windows.Foundation.TimeSpan start, [in] Windows.Foundation.TimeSpan end, [out] [retval] boolean* result);
                [propget] HRESULT LastUpdateCheckTime([out] [retval] Windows.Foundation.DateTime* value);
                [propget] HRESULT LastUpdateInstallTime([out] [retval] Windows.Foundation.DateTime* value);
                [propget] HRESULT LastErrorInfo([out] [retval] Windows.System.Update.SystemUpdateLastErrorInfo** value);
                HRESULT GetAutomaticRebootBlockIds([out] [retval] Windows.Foundation.Collections.IVectorView<HSTRING>** result);
                HRESULT BlockAutomaticRebootAsync([in] HSTRING lockId, [out] [retval] Windows.Foundation.IAsyncOperation<boolean>** operation);
                HRESULT UnblockAutomaticRebootAsync([in] HSTRING lockId, [out] [retval] Windows.Foundation.IAsyncOperation<boolean>** operation);
                [propget] HRESULT ExtendedError([out] [retval] HRESULT* value);
                HRESULT GetUpdateItems([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.System.Update.SystemUpdateItem*>** result);
                [propget] HRESULT AttentionRequiredReason([out] [retval] Windows.System.Update.SystemUpdateAttentionRequiredReason* value);
                HRESULT SetFlightRing([in] HSTRING flightRing, [out] [retval] boolean* result);
                HRESULT GetFlightRing([out] [retval] HSTRING* result);
                HRESULT StartInstall([in] Windows.System.Update.SystemUpdateStartInstallAction action);
                HRESULT RebootToCompleteInstall();
                HRESULT StartCancelUpdates();
            }

            [contract(Windows.System.SystemManagementContract, 6.0)]
            [marshaling_behavior(agile)]
            runtimeclass SystemUpdateItem
            {
                [default] interface Windows.System.Update.ISystemUpdateItem;
            }

            [contract(Windows.System.SystemManagementContract, 6.0)]
            [marshaling_behavior(agile)]
            runtimeclass SystemUpdateLastErrorInfo
            {
                [default] interface Windows.System.Update.ISystemUpdateLastErrorInfo;
            }

            [contract(Windows.System.SystemManagementContract, 6.0)]
            [marshaling_behavior(agile)]
            [static(Windows.System.Update.ISystemUpdateManagerStatics, Windows.System.SystemManagementContract, 6.0)]
            [threading(both)]
            runtimeclass SystemUpdateManager
            {
            }
        }
    }
}
