import React from 'react';
import { Appearance, StripeConstructorOptions, StripeElementLocale } from '@stripe/stripe-js';
import { CaptureMode } from '../constants';
import enLabels from '../translations/langs/en';
import type { SlotPropType, PaymentElementPropTypes, PaymentElementThemePropTypes } from '../components/payment-element/payment.types';
import type { BankFormResponse } from '../components/payment-methods/Bank/bank.types';
import type { PayPalFormResponse } from '../components/payment-methods/PayPal/paypal.types';
import type { OxxoFormResponse } from '../components/payment-methods/Oxxo/oxxo.types';
import type { CreditCardFormResponse } from '../components/payment-methods/CreditCard/creditCard.types';
import type { ProcessorsType, PaymentMethodsTypes } from '../constants';
import type { NextAction } from './NextAction';
export type PaymentMethodWithSubmitProps<T> = Omit<T, 'onSubmit'> & {
    onSubmit: (data: object) => Promise<NextAction>;
};
export type SlotProp = SlotPropType;
export type PaymentElementThemeType = PaymentElementThemePropTypes;
export type PaymentElementProps = PaymentMethodWithSubmitProps<PaymentElementPropTypes>;
export type PaymentMethodsType = PaymentMethodsTypes;
export interface StripeProcessor {
    type: 'platform' | 'direct';
    apiVersion: string;
    account: string;
    clientKey: string;
}
export interface AdyenProcessor {
    [key: string]: any;
}
export interface PaypalProcessor {
    clientId: string;
}
export type ProcessorConfig = {
    processor: ProcessorType;
    stripe?: StripeProcessor;
    adyen?: AdyenProcessor;
    paypal?: PaypalProcessor;
};
export type ProcessorConfigs = ProcessorConfig[];
export type ProcessorType = ProcessorsType;
export type PaymentMethodConfig = {
    processor: ProcessorType;
    tokenization?: Record<string, any>;
    constraints?: Record<string, any>;
};
export type PaymentMethodsConfig = {
    [key in PaymentMethodsType]?: PaymentMethodConfig;
};
export type PaymentGatewayOptions = StripeGatewayOptions;
export type ProcessorProps = {
    processors: ProcessorConfigs;
    method: PaymentMethodsType;
    methodConfig?: PaymentMethodConfig;
    billingConfig?: Record<string, any>;
    options?: Record<string, any>;
    children: React.ReactNode;
};
export interface StripeGatewayOptions {
    publishableKey?: string;
    account?: string;
    type?: 'direct' | 'platform';
    appearance?: Appearance;
    configurationOptions?: StripeConstructorOptions;
    deferred?: boolean;
    betas?: boolean;
    locale?: StripeElementLocale;
    options?: {
        [s: string]: any;
        currency: string;
        amount: number;
    };
}
export interface Provider {
    createProvider: (params?: StripeGatewayOptions) => any;
}
export type LocaleType = string;
export type PaymentElementResponse = (CreditCardFormResponse | BankFormResponse | PayPalFormResponse | OxxoFormResponse) & {
    paymentMethod: PaymentMethodsType;
    paymentMethodId?: any;
    paymentMethodHash?: any;
};
export type FormInputsType = Record<string, any>;
export type { ComponentStyleConfig } from '@chakra-ui/react';
export type { SystemStyleFunction } from '@chakra-ui/theme-tools';
export type LabelLangType = Record<keyof typeof enLabels, string>;
export type LabelsType = Record<LocaleType, LabelLangType>;
export type PaymentMethodSlotType = Record<PaymentMethodsType, React.ReactNode>;
export type CaptureModeType = (typeof CaptureMode)[keyof typeof CaptureMode];
export type IsBillingRequiredType = 'mandatory' | 'optional';
export type ModeType = 'live' | 'test';
export declare enum BillingFieldsEnum {
    'first_name' = 0,
    'last_name' = 1,
    'name' = 2,
    'birthday' = 3,
    'document' = 4,
    'document_number' = 5,
    'document_type' = 6,
    'tax_id' = 7,
    'address1' = 8,
    'address2' = 9,
    'city' = 10,
    'state' = 11,
    'country' = 12,
    'zip' = 13,
    'company' = 14,
    'email' = 15,
    'phone' = 16,
    'fax' = 17
}
export type BillingSettingsResponseParams = {
    [key in keyof typeof BillingFieldsEnum]?: IsBillingRequiredType;
};
export interface SettingsResponseDataParams {
    gateway: ProcessorsType;
    stripe: StripeProcessor;
    adyen: AdyenProcessor;
    billingAddressFields: BillingSettingsResponseParams;
    mode: ModeType;
    paymentMethods: ProcessorsType[];
}
export interface MappingServiceResponse {
    island?: string;
    baseUrl: string;
    apiUrl: string;
}
export interface Settings {
    billingAddressFields: BillingSettingsResponseParams;
    mode: {
        [processor: string]: ModeType;
    };
    paymentMethods: PaymentMethodsTypes;
    paymentMethodConfigurations: PaymentMethodsConfig;
    processors: ProcessorConfigs;
}
export type EnvType = 'prod' | 'stage' | 'dev' | 'local';
export type { PaymentElementHandles } from '../components/payment-element/payment.types';
export type { NextAction, NextActionDetails } from './NextAction';
