import type { Container } from '../../components/container';
import type { IShippingOption, IWalletMeta, WALLET_TYPE } from '../../components/param';
import { EventEmitter } from '../../helper/event-emitter';
export interface IWalletButtonsAvailability {
    apple_pay: boolean;
    google_pay: boolean;
}
export interface IWalletServiceMeta extends IWalletMeta {
    amount: number;
    currency: string;
    capture?: boolean;
    id?: string;
    gateway_mode?: string;
    credentials?: object;
    reference?: string;
    success_url?: string;
    error_url?: string;
}
export interface IWalletServiceUpdateData {
    amount: number;
    shipping_options?: IShippingOption[];
}
export interface IWalletServiceUpdate {
    success: boolean;
    body?: IWalletServiceUpdateData;
}
export interface IPaymentMethod {
    payment_method_id?: string;
    device?: string;
    customer: {
        payer_name: string;
        payer_email: string;
        payer_phone: string;
        payment_source: {
            wallet_type: WALLET_TYPE;
            card_name: string;
            type: string;
            card_scheme: string;
            card_number_last4: string;
            expire_month: number;
            expire_year: number;
            address_line1: string;
            address_line2: string;
            address_city: string;
            address_postcode: string;
            address_state: string;
            address_country: string;
            ref_token?: string;
        };
    };
    shipping?: {
        method?: string;
        options?: IShippingOption[];
        address_line1?: string;
        address_line2?: string;
        address_city?: string;
        address_postcode?: string;
        address_state?: string;
        address_country?: string;
        address_company?: string;
        address_origin_postcode?: string;
        contact?: {
            first_name?: string;
            last_name?: string;
            email?: string;
            phone?: string;
            phone2?: string;
        };
    };
}
export declare const WALLET_EVENT: {
    UNAVAILABLE: string;
    UPDATE: string;
    PAYMENT_METHOD_SELECTED: string;
    PAYMENT_SUCCESS: string;
    PAYMENT_IN_REVIEW: string;
    PAYMENT_ERROR: string;
    CALLBACK: string;
    AUTH_TOKENS_CHANGED: string;
    BUTTON_CLICK: string;
    CHECKOUT_OPEN: string;
    CHECKOUT_CLOSE: string;
    LOADED: string;
};
export type IUnavailableWalletEventBody = Record<string, never>;
export interface IPaymentMethodSelectedWalletEventBody {
    data: IPaymentMethod;
    onSuccess: () => void;
    onError: (message?: string) => void;
}
export interface ICallbackData {
    request_type: string;
}
export interface ICallbackSuccessData {
    id: string;
    status: string;
    callback_method: string;
    callback_rel: string;
    callback_url: string;
}
export interface IWalletCallbackEventBody {
    data: ICallbackData;
    onSuccess: (data?: ICallbackSuccessData) => void;
    onError: (message?: string, code?: string) => void;
}
export interface IWalletService {
    load(container: Container): Promise<void>;
    close?(): void;
    update(data: IWalletServiceUpdate): void;
    enable(): void;
    disable(): void;
    setEnv(env: string): any;
    on(eventName: string, cb?: (data: IUnavailableWalletEventBody | IPaymentMethodSelectedWalletEventBody | unknown) => void): any;
}
export declare abstract class WalletService {
    protected publicKey: string;
    protected meta: IWalletServiceMeta;
    protected env: string;
    protected childWallets: IWalletService[];
    protected eventEmitter: EventEmitter;
    constructor(publicKey: string, meta: IWalletServiceMeta);
    protected initializeChildWallets(): void;
    protected getGatewayName(): string;
    setEnv(env: string): this;
    load(container: Container): Promise<void>;
    update(data: IWalletServiceUpdate): void;
    enable(): void;
    disable(): void;
    on(eventName: string, cb?: (data: IUnavailableWalletEventBody | IPaymentMethodSelectedWalletEventBody) => void): Promise<unknown> | (() => void);
    /**
     * Handles the merchant's onClick callback event.
     * Supports both synchronous (boolean) and asynchronous (Promise) handlers.
     * @protected
     */
    protected handleMerchantOnButtonClickEvent(): Promise<void>;
}
//# sourceMappingURL=wallet-service.d.ts.map