import type { BridgeCustomer, BridgeVirtualBankAccount, PreviewTransferResult } from '@funkit/api-base';
import type { MeshConnectionInfo } from '~/providers/FunkitMeshProvider';
/** Supported payment methods in FunkitConnect. **/
export declare enum PaymentMethod {
    /** Meld - Credit / Debit Card **/
    CARD = "card",
    /** Account Balance **/
    ACCOUNT_BALANCE = "balance",
    /** Mesh - Exchange / Brokerage **/
    BROKERAGE = "brokerage",
    TOKEN_TRANSFER = "token_transfer",
    VIRTUAL_BANK = "virtual_bank"
}
type MeshMeta = MeshConnectionInfo & {
    networkId?: string;
    previewResult?: PreviewTransferResult & {
        previewExpiresAt: number;
    };
};
/** Full payment method information used in frontend during payment flows. **/
interface PaymentMethodInfoBase {
    description: string;
    paymentMethod: PaymentMethod;
    title: string;
}
export interface PaymentMethodCardInfo extends PaymentMethodInfoBase {
    paymentMethod: PaymentMethod.CARD;
}
export interface PaymentMethodBrokerageInfo extends PaymentMethodInfoBase {
    paymentMethod: PaymentMethod.BROKERAGE;
    meta: MeshMeta;
}
export interface PaymentMethodAccountInfo extends PaymentMethodInfoBase {
    paymentMethod: PaymentMethod.ACCOUNT_BALANCE;
}
export interface PaymentMethodTokenTransferInfo extends PaymentMethodInfoBase {
    paymentMethod: PaymentMethod.TOKEN_TRANSFER;
}
export interface PaymentMethodVirtualBankIncompleteInfo extends PaymentMethodInfoBase {
    paymentMethod: PaymentMethod.VIRTUAL_BANK;
    matchingFiatAccount: BridgeVirtualBankAccount | undefined;
    bridgeCustomer: BridgeCustomer | undefined;
}
export interface PaymentMethodVirtualBankInfo extends PaymentMethodVirtualBankIncompleteInfo {
    matchingFiatAccount: BridgeVirtualBankAccount;
}
export type ConnectablePaymentMethodInfo = PaymentMethodAccountInfo | PaymentMethodBrokerageInfo | PaymentMethodVirtualBankInfo;
export type PaymentMethodInfo = PaymentMethodCardInfo | PaymentMethodBrokerageInfo | PaymentMethodAccountInfo | PaymentMethodTokenTransferInfo | PaymentMethodVirtualBankIncompleteInfo;
interface CardPaymentMethodParams {
    paymentMethod: PaymentMethod.CARD;
    /** We also store client's customization in our database :( */
    titleCustomization: string;
}
interface AccountPaymentMethodParams {
    paymentMethod: PaymentMethod.ACCOUNT_BALANCE;
    walletAddress: string;
}
interface BrokeragePaymentMethodParams {
    paymentMethod: PaymentMethod.BROKERAGE;
    connection: MeshConnectionInfo;
}
interface TokenTransferPaymentMethodParams {
    paymentMethod: PaymentMethod.TOKEN_TRANSFER;
}
interface VirtualBankPaymentMethodIncompleteParams {
    paymentMethod: PaymentMethod.VIRTUAL_BANK;
    matchingFiatAccount: undefined;
    bridgeCustomer: BridgeCustomer | undefined;
}
interface VirtualBankPaymentMethodParams {
    paymentMethod: PaymentMethod.VIRTUAL_BANK;
    matchingFiatAccount: BridgeVirtualBankAccount;
    bridgeCustomer: BridgeCustomer | undefined;
}
export declare function createPaymentMethodInfo(params: CardPaymentMethodParams): PaymentMethodCardInfo;
export declare function createPaymentMethodInfo(params: AccountPaymentMethodParams): PaymentMethodAccountInfo;
export declare function createPaymentMethodInfo(params: BrokeragePaymentMethodParams): PaymentMethodBrokerageInfo;
export declare function createPaymentMethodInfo(params: TokenTransferPaymentMethodParams): PaymentMethodTokenTransferInfo;
export declare function createPaymentMethodInfo(params: VirtualBankPaymentMethodIncompleteParams): PaymentMethodVirtualBankIncompleteInfo;
export declare function createPaymentMethodInfo(params: VirtualBankPaymentMethodParams): PaymentMethodVirtualBankInfo;
export {};
