/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */

#ifdef __WIDL__
#pragma winrt ns_prefix
#endif

import "inspectable.idl";
import "hstring.idl";
import "windows.foundation.idl";

namespace Windows {
  namespace Foundation {
    interface IAsyncAction;
    interface TypedEventHandler;
    //struct EventRegistrationToken;

    namespace Collections {
      interface IPropertySet;
      interface IMapView;
    }
  }
  namespace Storage {
    interface IStorageItem;
    interface IStorageFolder;
    interface IApplicationData;
    interface IApplicationDataStatics;
    interface IApplicationDataSetVersionHandler;
    interface ApplicationDataContainer;
    interface ApplicationDataSetVersionHandler; //delegate
    interface ISetVersionRequest;
    interface ISetVersionDeferral;
    enum StorageDeleteOption;
    enum NameCollisionOption;
    enum StorageItemTypes;
    enum ApplicationDataLocality;
    enum ApplicationDataCreateDisposition;
    enum FileAttributes;
    enum CreationCollisionOption;
  }
}

namespace Windows {
  namespace Storage {
    typedef enum NameCollisionoption {
      NameCollisionoption_GenerateUniqueName,
      NameCollisionoption_ReplaceExisting,
      NameCollisionoption_FailIfExists
    } NameCollisionOption;

    typedef enum StorageDeleteOption {
      StorageDeleteOption_Default,
      StorageDeleteOption_PermanentDelete
    } StorageDeleteOption;

    typedef enum StorageItemTypes {
      StorageItemTypes_None,
      StorageItemTypes_File,
      StorageItemTypes_Folder
    } StorageItemTypes;

    typedef enum ApplicationDataCreateDisposition {
      ApplicationDataCreateDisposition_Always,
      ApplicationDataCreateDisposition_Existing
    } ApplicationDataCreateDisposition;

    typedef enum ApplicationDataLocality {
      ApplicationDataLocality_Local,
      ApplicationDataLocality_Roaming,
      ApplicationDataLocality_Temporary
    } ApplicationDataLocality;

    typedef enum FileAttributes {
      FileAttributes_Normal,
      FileAttributes_ReadOnly,
      FileAttributes_Directory,
      FileAttributes_Archive,
      FileAttributes_Temporary
    } FileAttributes;

    typedef enum CreationCollisionOption {
      CreationCollisionOption_GenerateUniqueName,
      CreationCollisionOption_ReplaceExisting,
      CreationCollisionOption_FailIfExists,
      CreationCollisionOption_OpenIfExists
    } CreationCollisionOption;

    [uuid(4207A996-CA2F-42F7-BDE8-8B10457A7F30)]
    interface IStorageItem : IInspectable
    {
      HRESULT RenameAsyncOverloadDefaultOptions(HSTRING desiredName, /*IAsyncAction*/ IInspectable** action);
      HRESULT RenameAsync(HSTRING desiredName, NameCollisionOption option, /*IAsyncAction*/ IInspectable** action);
      HRESULT DeleteAsyncOverloadDefaultOptions(/*IAsyncAction*/ IInspectable** action);
      HRESULT DeleteAsync(StorageDeleteOption option, /*IAsyncAction*/ IInspectable** action);
      HRESULT GetBasicPropertiesAsync(/*IAsyncOperation<Windows.Storage.FileProperties.BasicProperties*>*/ IInspectable** action);
      [propget] HRESULT Name(HSTRING *value);
      [propget] HRESULT Path(HSTRING *value);
      [propget] HRESULT Attributes(FileAttributes* value);
      [propget] HRESULT DateCreated(Windows.Foundation.DateTime* value);
      HRESULT IsOfType(StorageItemTypes itemType, boolean* value);
    }

    [uuid(5A2A7520-4802-452D-9AD9-4351ADA7EC35)]
    interface IKnownFoldersStatics : IInspectable
    {
        [propget] HRESULT MusicLibrary(IStorageFolder** value);
        [propget] HRESULT PicturesLibrary(IStorageFolder** value);
        [propget] HRESULT VideosLibrary(IStorageFolder** value);
        [propget] HRESULT DocumentsLibrary(IStorageFolder** value);
        [propget] HRESULT HomeGroup(IStorageFolder** value);
        [propget] HRESULT RemovableDevices(IStorageFolder** value);
        [propget] HRESULT MediaServerDevices(IStorageFolder** value);
    }

    [uuid(72D1CB78-B3EF-4F75-A80B-6FD9DAE2944B)]
    interface IStorageFolder : IInspectable
    {
      HRESULT CreateFileAsyncOverloadDefaultOptions(HSTRING desiredName, /*IAsyncOperation<IStorageFile*>*/IInspectable** operation);
      HRESULT CreateFileAsync(HSTRING desiredName, CreationCollisionOption options, /*IAsyncOperation<IStorageFile*>*/IInspectable** operation);
      HRESULT CreateFolderAsyncOverloadDefaultOptions(HSTRING desiredName, /*IAsyncOperation<IStorageFolder*>*/IInspectable** operation);
      HRESULT CreateFolderAsync(HSTRING desiredName, CreationCollisionOption options, /*IAsyncOperation<StorageFolder*>*/IInspectable** operation);
      HRESULT GetFileAsync(HSTRING name, /*IAsyncOperation<StorageFile*>*/IInspectable** operation);
      HRESULT GetFolderAsync(HSTRING name, /*IAsyncOperation<StorageFolder*>*/IInspectable** operation);
      HRESULT GetItemAsync(HSTRING name, /*IAsyncOperation<StorageItem*>*/IInspectable** operation);
      HRESULT GetFilesAsyncOverloadDefaultOptionsStartAndCount(/*IAsyncOperation<IVectorView<StorageFile*>*>*/IInspectable** operation);
      HRESULT GetFoldersAsyncOverloadDefaultOptionsStartAndCount(/*IAsyncOperation<IVectorView<StorageFolder*>*>*/IInspectable** operation);
      HRESULT GetItemsAsyncOverloadDefaultStartAndCount(/*IAsyncOperation<IVectorView<StorageItem*>*>*/IInspectable** operation);
    }

    [uuid(C5AEFD1E-F467-40BA-8566-AB640A441E1D)]
    interface IApplicationDataContainer : IInspectable {
      [propget] HRESULT Name(HSTRING* value);
      [propget] HRESULT Locality(ApplicationDataLocality* value);
      [propget] HRESULT Values(/*IPropertySet*/IInspectable** value);
      [propget] HRESULT Containers(/*IMapView<HSTRING, ApplicationDataContainer*>*/IInspectable** value);
       HRESULT CreateContainer(HSTRING name, ApplicationDataCreateDisposition disposition, IApplicationDataContainer** container);
       HRESULT DeleteContainer([in] HSTRING name);
     }

    [uuid(C3DA6FB7-B744-4B45-B0B8-223A0938D0DC)]
    interface IApplicationData : IInspectable {
      [propget] HRESULT Version(int* value);
      HRESULT SetVersionAsync(int desiredVersion, ApplicationDataSetVersionHandler* handler, /*IAsyncAction*/ IInspectable** setVersionOperation);
      HRESULT ClearAllAsync(/*IAsyncAction*/ IInspectable** clearOperation);
      HRESULT ClearAsync(ApplicationDataLocality locality, /*IAsyncAction*/ IInspectable** clearOperation);
      [propget] HRESULT LocalSettings(IApplicationDataContainer** value);
      [propget] HRESULT RoamingSettings(IApplicationDataContainer** value);
      [propget] HRESULT LocalFolder(IStorageFolder** value);
      [propget] HRESULT RoamingFolder(IStorageFolder** value);
      [propget] HRESULT TemporaryFolder(IStorageFolder** value);
      // [eventadd] HRESULT DataChanged(/*TypedEventHandler<ApplicationData*, IInspectable*>*/IInspectable* handler, EventRegistrationToken* token);
      /* [eventremove] */ HRESULT DataChanged(EventRegistrationToken token);
      HRESULT SignalDataChanged();
      HRESULT RoamingStorageQuota(UINT64* value);
    }

    [uuid(9E65CD69-0BA3-4E32-BE29-B02DE6607638)]
    interface IApplicationData2 : IInspectable {
      [propget] HRESULT LocalCacheFolder(IStorageFolder** value);
    }

    [uuid(5612147B-E843-45E3-94D8-06169E3C8E17)]
    interface IApplicationDataStatics : IInspectable {
      [propget] HRESULT Current(IApplicationData** data);
    }

    [uuid(A05791E6-CC9F-4687-ACAB-A364FD785463)]
    interface ApplicationDataSetVersionHandler : IUnknown {
      HRESULT ApplicationDataSetVersionHandler(ISetVersionRequest* setVersionRequest);
    }

    [uuid(B9C76B9B-1056-4E69-8330-162619956F9B)]
    interface ISetVersionRequest : IInspectable {
      [propget] HRESULT CurrentVersion(UINT32* currentVersion);
      [propget] HRESULT DesiredVersion(UINT32* desiredVersion);
      HRESULT GetDeferral(ISetVersionDeferral** deferral);
    }

    [uuid(033508A2-781A-437A-B078-3F32BADCFE47)]
    interface ISetVersionDeferral : IInspectable {
      HRESULT Complete();
    }
  }
}
