import type { BridgeCustomer, BridgeVirtualBankAccount } from '@funkit/api-base';
import { PaymentMethod } from '@funkit/connect-core';
import { type BluvoExchangeType } from '../consts/bluvo';
export { PaymentMethod };
/** 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;
    deviceId: string;
    exchange: BluvoExchangeType;
}
export interface PaymentMethodAccountInfo extends PaymentMethodInfoBase {
    paymentMethod: PaymentMethod.ACCOUNT_BALANCE;
}
export interface PaymentMethodTokenTransferInfo extends PaymentMethodInfoBase {
    paymentMethod: PaymentMethod.TOKEN_TRANSFER;
}
export interface PaymentMethodBitcoinLightningInfo extends PaymentMethodInfoBase {
    paymentMethod: PaymentMethod.BITCOIN_LIGHTNING;
}
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 declare function isConnectablePaymentMethodInfo(value: unknown): value is ConnectablePaymentMethodInfo;
/**
 * Balance-less rails: checkout methods with no on-chain source holding (Card,
 * Bitcoin Lightning, etc) where "available balance" is not a meaningful concept,
 * so balance/min/max validation is skipped. Only ACCOUNT_BALANCE and BROKERAGE
 * carry a measurable holding. Typed to PaymentMethodInfo's methods, not the full
 * PaymentMethod enum (which also carries Swapped's iframe-only rails).
 */
export declare function isBalanceLessPaymentMethod(paymentMethod: PaymentMethodInfo['paymentMethod']): boolean;
export type PaymentMethodInfo = PaymentMethodCardInfo | PaymentMethodBrokerageInfo | PaymentMethodAccountInfo | PaymentMethodTokenTransferInfo | PaymentMethodBitcoinLightningInfo | 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;
    deviceId: string;
    exchange: BluvoExchangeType;
}
interface TokenTransferPaymentMethodParams {
    paymentMethod: PaymentMethod.TOKEN_TRANSFER;
}
interface BitcoinLightningPaymentMethodParams {
    paymentMethod: PaymentMethod.BITCOIN_LIGHTNING;
}
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: TokenTransferPaymentMethodParams): PaymentMethodTokenTransferInfo;
export declare function createPaymentMethodInfo(params: BitcoinLightningPaymentMethodParams): PaymentMethodBitcoinLightningInfo;
export declare function createPaymentMethodInfo(params: VirtualBankPaymentMethodIncompleteParams): PaymentMethodVirtualBankIncompleteInfo;
export declare function createPaymentMethodInfo(params: VirtualBankPaymentMethodParams): PaymentMethodVirtualBankInfo;
export declare function createPaymentMethodInfo(params: BrokeragePaymentMethodParams): PaymentMethodBrokerageInfo;
