import GatewayRegistrar from './gateways';
import type {DonationConfirmationReceiptServerExports, FormServerExports} from '@givewp/forms/types';
import type {useFormContext, useFormState, useWatch} from 'react-hook-form';
import defaultFormTemplates from './templates';
import useCurrencyFormatter from '@givewp/forms/app/hooks/useCurrencyFormatter';
import useDonationSummary from '@givewp/forms/app/hooks/useDonationSummary';
import {useDonationFormSettings} from '@givewp/forms/app/store/form-settings';
import useFormSubmitButton from '@givewp/forms/app/hooks/useFormSubmitButton';
import useFormData from '@givewp/forms/app/hooks/useFormData';

declare global {
    interface Window {
        givewpDonationFormExports: FormServerExports;
        givewpDonationConfirmationReceiptExports: DonationConfirmationReceiptServerExports;
        givewp: {
            gateways: GatewayRegistrar;
            form: {
                templates: typeof defaultFormTemplates;
                hooks: {
                    useFormContext: typeof useFormContext;
                    useWatch: typeof useWatch;
                    useFormState: typeof useFormState;
                    useCurrencyFormatter: typeof useCurrencyFormatter;
                    useDonationSummary: typeof useDonationSummary;
                    useDonationFormSettings: typeof useDonationFormSettings;
                    useFormSubmitButton: typeof useFormSubmitButton;
                    useFormData: typeof useFormData;
                };
            };
        };
    }
}

if (!window.givewp) {
    // @ts-ignore
    window.givewp = {
        // @ts-ignore
        form: {},
    };
}

window.givewp.gateways = new GatewayRegistrar();
window.givewp.form.templates = Object.freeze(defaultFormTemplates);
