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

// Forward Declare
namespace Windows
{
    namespace Devices
    {
        namespace Geolocation
        {
            runtimeclass GeoboundingBox;

            runtimeclass Geocircle;

            runtimeclass Geopoint;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Services
    {
        namespace Maps
        {
            namespace OfflineMaps
            {
                typedef enum OfflineMapPackageQueryStatus OfflineMapPackageQueryStatus;

                typedef enum OfflineMapPackageStartDownloadStatus OfflineMapPackageStartDownloadStatus;

                typedef enum OfflineMapPackageStatus OfflineMapPackageStatus;

                interface IOfflineMapPackage;

                interface IOfflineMapPackageQueryResult;

                interface IOfflineMapPackageStartDownloadResult;

                interface IOfflineMapPackageStatics;

                runtimeclass OfflineMapPackage;

                runtimeclass OfflineMapPackageQueryResult;

                runtimeclass OfflineMapPackageStartDownloadResult;
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Services
    {
        namespace Maps
        {
            namespace OfflineMaps
            {
                declare
                {
                    interface Windows.Foundation.Collections.IIterable<Windows.Services.Maps.OfflineMaps.OfflineMapPackage*>;

                    interface Windows.Foundation.Collections.IIterator<Windows.Services.Maps.OfflineMaps.OfflineMapPackage*>;

                    interface Windows.Foundation.Collections.IVectorView<Windows.Services.Maps.OfflineMaps.OfflineMapPackage*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Services.Maps.OfflineMaps.OfflineMapPackageQueryResult*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.Services.Maps.OfflineMaps.OfflineMapPackageStartDownloadResult*>;

                    interface Windows.Foundation.TypedEventHandler<Windows.Services.Maps.OfflineMaps.OfflineMapPackage*, IInspectable*>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Services
    {
        namespace Maps
        {
            namespace OfflineMaps
            {
                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                enum OfflineMapPackageQueryStatus
                {
                    Success            = 0,
                    UnknownError       = 1,
                    InvalidCredentials = 2,
                    NetworkFailure     = 3
                };

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                enum OfflineMapPackageStartDownloadStatus
                {
                    Success                 = 0,
                    UnknownError            = 1,
                    InvalidCredentials      = 2,
                    DeniedWithoutCapability = 3
                };

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                enum OfflineMapPackageStatus
                {
                    NotDownloaded = 0,
                    Downloading   = 1,
                    Downloaded    = 2,
                    Deleting      = 3
                };

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.Services.Maps.OfflineMaps.OfflineMapPackage)]
                [uuid(A797673B-A5B5-4144-B525-E68C8862664B)]
                interface IOfflineMapPackage : IInspectable
                {
                    [propget] HRESULT Status([out] [retval] Windows.Services.Maps.OfflineMaps.OfflineMapPackageStatus* value);
                    [propget] HRESULT DisplayName([out] [retval] HSTRING* value);
                    [propget] HRESULT EnclosingRegionName([out] [retval] HSTRING* value);
                    [propget] HRESULT EstimatedSizeInBytes([out] [retval] UINT64* value);
                    [eventremove] HRESULT StatusChanged([in] EventRegistrationToken token);
                    [eventadd] HRESULT StatusChanged([in] Windows.Foundation.TypedEventHandler<Windows.Services.Maps.OfflineMaps.OfflineMapPackage*, IInspectable*>* value, [out] [retval] EventRegistrationToken* token);
                    HRESULT RequestStartDownloadAsync([out] [retval] Windows.Foundation.IAsyncOperation<Windows.Services.Maps.OfflineMaps.OfflineMapPackageStartDownloadResult*>** value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.Services.Maps.OfflineMaps.OfflineMapPackageQueryResult)]
                [uuid(55585411-39E1-4E41-A4E1-5F4872BEE199)]
                interface IOfflineMapPackageQueryResult : IInspectable
                {
                    [propget] HRESULT Status([out] [retval] Windows.Services.Maps.OfflineMaps.OfflineMapPackageQueryStatus* value);
                    [propget] HRESULT Packages([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Services.Maps.OfflineMaps.OfflineMapPackage*>** value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.Services.Maps.OfflineMaps.OfflineMapPackageStartDownloadResult)]
                [uuid(D965B918-D4D6-4AFE-9378-3EC71EF11C3D)]
                interface IOfflineMapPackageStartDownloadResult : IInspectable
                {
                    [propget] HRESULT Status([out] [retval] Windows.Services.Maps.OfflineMaps.OfflineMapPackageStartDownloadStatus* value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.Services.Maps.OfflineMaps.OfflineMapPackage)]
                [uuid(185E7922-A831-4AB0-941F-6998FA929285)]
                interface IOfflineMapPackageStatics : IInspectable
                {
                    HRESULT FindPackagesAsync([in] Windows.Devices.Geolocation.Geopoint* queryPoint, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Services.Maps.OfflineMaps.OfflineMapPackageQueryResult*>** result);
                    HRESULT FindPackagesInBoundingBoxAsync([in] Windows.Devices.Geolocation.GeoboundingBox* queryBoundingBox, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Services.Maps.OfflineMaps.OfflineMapPackageQueryResult*>** result);
                    HRESULT FindPackagesInGeocircleAsync([in] Windows.Devices.Geolocation.Geocircle* queryCircle, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Services.Maps.OfflineMaps.OfflineMapPackageQueryResult*>** result);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [marshaling_behavior(agile)]
                [static(Windows.Services.Maps.OfflineMaps.IOfflineMapPackageStatics, Windows.Foundation.UniversalApiContract, 4.0)]
                [threading(both)]
                runtimeclass OfflineMapPackage
                {
                    [default] interface Windows.Services.Maps.OfflineMaps.IOfflineMapPackage;
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass OfflineMapPackageQueryResult
                {
                    [default] interface Windows.Services.Maps.OfflineMaps.IOfflineMapPackageQueryResult;
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass OfflineMapPackageStartDownloadResult
                {
                    [default] interface Windows.Services.Maps.OfflineMaps.IOfflineMapPackageStartDownloadResult;
                }
            }
        }
    }
}
