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

// Forward Declare
namespace Windows
{
    namespace ApplicationModel
    {
        namespace Payments
        {
            runtimeclass PaymentAddress;

            runtimeclass PaymentCanMakePaymentResult;

            runtimeclass PaymentRequest;

            runtimeclass PaymentRequestChangedResult;

            typedef enum PaymentRequestCompletionStatus PaymentRequestCompletionStatus;

            runtimeclass PaymentShippingOption;

            runtimeclass PaymentToken;
        }
    }
}
namespace Windows
{
    namespace Foundation
    {
        interface IAsyncAction;

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace ApplicationModel
    {
        namespace Payments
        {
            namespace Provider
            {
                interface IPaymentAppCanMakePaymentTriggerDetails;

                interface IPaymentAppManager;

                interface IPaymentAppManagerStatics;

                interface IPaymentTransaction;

                interface IPaymentTransactionAcceptResult;

                interface IPaymentTransactionStatics;

                runtimeclass PaymentAppCanMakePaymentTriggerDetails;

                runtimeclass PaymentAppManager;

                runtimeclass PaymentTransaction;

                runtimeclass PaymentTransactionAcceptResult;
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace ApplicationModel
    {
        namespace Payments
        {
            namespace Provider
            {
                declare
                {
                    interface Windows.Foundation.IAsyncOperation<Windows.ApplicationModel.Payments.Provider.PaymentTransaction*>;

                    interface Windows.Foundation.IAsyncOperation<Windows.ApplicationModel.Payments.Provider.PaymentTransactionAcceptResult*>;
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace ApplicationModel
    {
        namespace Payments
        {
            namespace Provider
            {
                [contract(Windows.Foundation.UniversalApiContract, 5.0)]
                [exclusiveto(Windows.ApplicationModel.Payments.Provider.PaymentAppCanMakePaymentTriggerDetails)]
                [uuid(0CE201F0-8B93-4EB6-8C46-2E4A6C6A26F6)]
                interface IPaymentAppCanMakePaymentTriggerDetails : IInspectable
                {
                    [propget] HRESULT Request([out] [retval] Windows.ApplicationModel.Payments.PaymentRequest** result);
                    HRESULT ReportCanMakePaymentResult([in] Windows.ApplicationModel.Payments.PaymentCanMakePaymentResult* value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.ApplicationModel.Payments.Provider.PaymentAppManager)]
                [uuid(0E47AA53-8521-4969-A957-DF2538A3A98F)]
                interface IPaymentAppManager : IInspectable
                {
                    HRESULT RegisterAsync([in] Windows.Foundation.Collections.IIterable<HSTRING>* supportedPaymentMethodIds, [out] [retval] Windows.Foundation.IAsyncAction** result);
                    HRESULT UnregisterAsync([out] [retval] Windows.Foundation.IAsyncAction** result);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.ApplicationModel.Payments.Provider.PaymentAppManager)]
                [uuid(A341AC28-FC89-4406-B4D9-34E7FE79DFB6)]
                interface IPaymentAppManagerStatics : IInspectable
                {
                    [propget] HRESULT Current([out] [retval] Windows.ApplicationModel.Payments.Provider.PaymentAppManager** value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.ApplicationModel.Payments.Provider.PaymentTransaction)]
                [uuid(62581DA0-26A5-4E9B-A6EB-66606CF001D3)]
                interface IPaymentTransaction : IInspectable
                {
                    [propget] HRESULT PaymentRequest([out] [retval] Windows.ApplicationModel.Payments.PaymentRequest** value);
                    [propget] HRESULT PayerEmail([out] [retval] HSTRING* value);
                    [propput] HRESULT PayerEmail([in] HSTRING value);
                    [propget] HRESULT PayerName([out] [retval] HSTRING* value);
                    [propput] HRESULT PayerName([in] HSTRING value);
                    [propget] HRESULT PayerPhoneNumber([out] [retval] HSTRING* value);
                    [propput] HRESULT PayerPhoneNumber([in] HSTRING value);
                    HRESULT UpdateShippingAddressAsync([in] Windows.ApplicationModel.Payments.PaymentAddress* shippingAddress, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.ApplicationModel.Payments.PaymentRequestChangedResult*>** result);
                    HRESULT UpdateSelectedShippingOptionAsync([in] Windows.ApplicationModel.Payments.PaymentShippingOption* selectedShippingOption, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.ApplicationModel.Payments.PaymentRequestChangedResult*>** result);
                    HRESULT AcceptAsync([in] Windows.ApplicationModel.Payments.PaymentToken* paymentToken, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.ApplicationModel.Payments.Provider.PaymentTransactionAcceptResult*>** result);
                    HRESULT Reject();
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.ApplicationModel.Payments.Provider.PaymentTransactionAcceptResult)]
                [uuid(060E3276-D30C-4817-95A2-DF7AE9273B56)]
                interface IPaymentTransactionAcceptResult : IInspectable
                {
                    [propget] HRESULT Status([out] [retval] Windows.ApplicationModel.Payments.PaymentRequestCompletionStatus* value);
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [exclusiveto(Windows.ApplicationModel.Payments.Provider.PaymentTransaction)]
                [uuid(8D639750-EE0A-4DF5-9B1E-1C0F9EC59881)]
                interface IPaymentTransactionStatics : IInspectable
                {
                    HRESULT FromIdAsync([in] HSTRING id, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.ApplicationModel.Payments.Provider.PaymentTransaction*>** result);
                }

                [contract(Windows.Foundation.UniversalApiContract, 5.0)]
                [marshaling_behavior(agile)]
                runtimeclass PaymentAppCanMakePaymentTriggerDetails
                {
                    [default] interface Windows.ApplicationModel.Payments.Provider.IPaymentAppCanMakePaymentTriggerDetails;
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [marshaling_behavior(agile)]
                [static(Windows.ApplicationModel.Payments.Provider.IPaymentAppManagerStatics, Windows.Foundation.UniversalApiContract, 4.0)]
                [threading(both)]
                runtimeclass PaymentAppManager
                {
                    [default] interface Windows.ApplicationModel.Payments.Provider.IPaymentAppManager;
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [marshaling_behavior(agile)]
                [static(Windows.ApplicationModel.Payments.Provider.IPaymentTransactionStatics, Windows.Foundation.UniversalApiContract, 4.0)]
                [threading(both)]
                runtimeclass PaymentTransaction
                {
                    [default] interface Windows.ApplicationModel.Payments.Provider.IPaymentTransaction;
                }

                [contract(Windows.Foundation.UniversalApiContract, 4.0)]
                [marshaling_behavior(agile)]
                [threading(both)]
                runtimeclass PaymentTransactionAcceptResult
                {
                    [default] interface Windows.ApplicationModel.Payments.Provider.IPaymentTransactionAcceptResult;
                }
            }
        }
    }
}
