import type { _PKContact } from "./PKContact.js";
import type { _PKPayment } from "./PKPayment.js";
import type { _PKPaymentAuthorizationResult } from "./PKPaymentAuthorizationResult.js";
import type { _PKPaymentAuthorizationViewController } from "./PKPaymentAuthorizationViewController.js";
import type { _PKPaymentMethod } from "./PKPaymentMethod.js";
import type { _PKPaymentRequestCouponCodeUpdate } from "./PKPaymentRequestCouponCodeUpdate.js";
import type { _PKPaymentRequestMerchantSessionUpdate } from "./PKPaymentRequestMerchantSessionUpdate.js";
import type { _PKPaymentRequestPaymentMethodUpdate } from "./PKPaymentRequestPaymentMethodUpdate.js";
import type { _PKPaymentRequestShippingContactUpdate } from "./PKPaymentRequestShippingContactUpdate.js";
import type { _PKPaymentRequestShippingMethodUpdate } from "./PKPaymentRequestShippingMethodUpdate.js";
import type { _PKShippingMethod } from "./PKShippingMethod.js";
import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSString } from "../Foundation/NSString.js";
import type { PKPaymentAuthorizationStatus } from "./PKPaymentAuthorizationStatus.js";
export interface _PKPaymentAuthorizationViewControllerDelegate {
    /**
     * Sent to the delegate when payment authorization is finished. This may occur when the user cancels the request, or after the PKPaymentAuthorizationStatus parameter of the paymentAuthorizationViewController:didAuthorizePayment:completion: has been shown to the user. The delegate is responsible for dismissing the view controller in this method.
     */
    paymentAuthorizationViewControllerDidFinish$?(controller: _PKPaymentAuthorizationViewController): void;
    /**
     * Sent to the delegate after the user has acted on the payment request. The application should inspect the payment to determine whether the payment request was authorized. If the application requested a shipping address then the full addresses is now part of the payment. The delegate must call completion with an appropriate authorization status, as may be determined by submitting the payment credential to a processing gateway for payment authorization.
     */
    paymentAuthorizationViewController$didAuthorizePayment$handler$?(controller: _PKPaymentAuthorizationViewController, payment: _PKPayment, completion: (result: _PKPaymentAuthorizationResult) => void): void;
    /**
     * Sent to the delegate before the payment is authorized, but after the user has authenticated using passcode or Touch ID. Optional.
     */
    paymentAuthorizationViewControllerWillAuthorizePayment$?(controller: _PKPaymentAuthorizationViewController): void;
    paymentAuthorizationViewController$didRequestMerchantSessionUpdate$?(controller: _PKPaymentAuthorizationViewController, handler: (update: _PKPaymentRequestMerchantSessionUpdate) => void): void;
    paymentAuthorizationViewController$didChangeCouponCode$handler$?(controller: _PKPaymentAuthorizationViewController, couponCode: _NSString, completion: (update: _PKPaymentRequestCouponCodeUpdate) => void): void;
    /**
     * Sent when the user has selected a new shipping method. The delegate should determine shipping costs based on the shipping method and either the shipping address supplied in the original PKPaymentRequest or the address fragment provided by the last call to paymentAuthorizationViewController: didSelectShippingAddress:completion:. The delegate must invoke the completion block with an updated array of PKPaymentSummaryItem objects. The delegate will receive no further callbacks except paymentAuthorizationViewControllerDidFinish: until it has invoked the completion block.
     */
    paymentAuthorizationViewController$didSelectShippingMethod$handler$?(controller: _PKPaymentAuthorizationViewController, shippingMethod: _PKShippingMethod, completion: (update: _PKPaymentRequestShippingMethodUpdate) => void): void;
    /**
     * Sent when the user has selected a new shipping address. The delegate should inspect the address and must invoke the completion block with an updated array of PKPaymentSummaryItem objects. The delegate will receive no further callbacks except paymentAuthorizationViewControllerDidFinish: until it has invoked the completion block.
     */
    paymentAuthorizationViewController$didSelectShippingContact$handler$?(controller: _PKPaymentAuthorizationViewController, contact: _PKContact, completion: (update: _PKPaymentRequestShippingContactUpdate) => void): void;
    /**
     * Sent when the user has selected a new payment card. Use this delegate callback if you need to update the summary items in response to the card type changing (for example, applying credit card surcharges) The delegate will receive no further callbacks except paymentAuthorizationViewControllerDidFinish: until it has invoked the completion block.
     */
    paymentAuthorizationViewController$didSelectPaymentMethod$handler$?(controller: _PKPaymentAuthorizationViewController, paymentMethod: _PKPaymentMethod, completion: (update: _PKPaymentRequestPaymentMethodUpdate) => void): void;
    /**
     * Deprecated delegate methods These methods are deprecated. Please migrate away from them to their replacements.
     * @deprecated Use paymentAuthorizationViewController:didAuthorizePayment:handler: instead to provide more granular errors
     */
    paymentAuthorizationViewController$didAuthorizePayment$completion$?(controller: _PKPaymentAuthorizationViewController, payment: _PKPayment, completion: (status: PKPaymentAuthorizationStatus) => void): void;
    /**
     * @deprecated Use paymentAuthorizationViewController:didSelectShippingMethod:handler: instead to provide more granular errors
     */
    paymentAuthorizationViewController$didSelectShippingMethod$completion$?(controller: _PKPaymentAuthorizationViewController, shippingMethod: _PKShippingMethod, completion: (status: PKPaymentAuthorizationStatus, summaryItems: _NSArray) => void): void;
    /**
     * @deprecated Use paymentAuthorizationViewController:didSelectShippingContact:handler: instead to provide more granular errors
     */
    paymentAuthorizationViewController$didSelectShippingContact$completion$?(controller: _PKPaymentAuthorizationViewController, contact: _PKContact, completion: (status: PKPaymentAuthorizationStatus, shippingMethods: _NSArray, summaryItems: _NSArray) => void): void;
    /**
     * @deprecated Use paymentAuthorizationViewController:didSelectPaymentMethod:handler: instead to provide more granular errors
     */
    paymentAuthorizationViewController$didSelectPaymentMethod$completion$?(controller: _PKPaymentAuthorizationViewController, paymentMethod: _PKPaymentMethod, completion: (summaryItems: _NSArray) => void): void;
}
