<!DOCTYPE html>
<body>
<script>
    const applePayRequestBase = () => {
        return {
            merchantCapabilities: ['supports3DS'],
            supportedNetworks: ['visa'],
            countryCode: 'US',
        };
    };

    const applePayPaymentRequest = () => {
        const request = applePayRequestBase();
        request.total = { label: 'total', amount: '0.00' };
        request.currencyCode = 'USD';
        return request;
    };

    const applePayMethod = () => {
        const request = applePayRequestBase();
        request.version = 1;
        request.merchantIdentifier = '';
        return {
            supportedMethods: 'https://apple.com/apple-pay',
            data: request,
        };
    };

    const eventListener = async () => {
        internals.mockPaymentCoordinator.supportsUnrestrictedApplePay = false;

        const applePaySessionAvailable = !!window.ApplePaySession;
        const paymentRequestAvailable = !!window.PaymentRequest;
        if (!applePaySessionAvailable || !paymentRequestAvailable) {
            window.webkit.messageHandlers.testApplePay.postMessage({ applePaySessionAvailable, paymentRequestAvailable });
            return;
        }

        const supportsVersion = ApplePaySession.supportsVersion(1);
        const canMakePayments = ApplePaySession.canMakePayments();
        const canMakePaymentsWithActiveCard = await ApplePaySession.canMakePaymentsWithActiveCard('');

        if (!window.wkPaymentRequest) {
            wkPaymentRequest = new PaymentRequest([applePayMethod()], {
                total: {
                    label: 'total',
                    amount: { currency: 'USD', value: '0.00' },
                },
            });
        }

        const canMakePayment = await wkPaymentRequest.canMakePayment();

        window.webkit.messageHandlers.testApplePay.postMessage({
            applePaySessionAvailable,
            paymentRequestAvailable,
            supportsVersion,
            canMakePayments,
            canMakePaymentsWithActiveCard,
            canMakePayment,
        });
    };

    window.addEventListener('load', eventListener);
    window.addEventListener('hashchange', eventListener);
</script>
