import { TransactionBaseService } from "./transaction-base-service";
import { Address, Cart, Customer, Payment, PaymentSession, PaymentSessionStatus, ShippingMethod } from "../models";
export declare type Data = Record<string, unknown>;
export declare type PaymentData = Data;
export declare type PaymentSessionData = Data;
export declare type PaymentContext = {
    cart: {
        context: Record<string, unknown>;
        id: string;
        email: string;
        shipping_address: Address | null;
        shipping_methods: ShippingMethod[];
    };
    currency_code: string;
    amount: number;
    resource_id?: string;
    customer?: Customer;
};
export declare type PaymentSessionResponse = {
    update_requests: {
        customer_metadata: Record<string, unknown>;
    };
    session_data: Record<string, unknown>;
};
/**
 * @deprecated use the new PaymentProcessor interface instead
 */
export interface PaymentService extends TransactionBaseService {
    getIdentifier(): string;
    /**
     * @deprecated use PaymentProcessor.retrievePayment instead
     * @param paymentSession
     */
    getPaymentData(paymentSession: PaymentSession): Promise<PaymentData>;
    /**
     * @deprecated use PaymentProcessor.updatePayment instead
     * @param paymentSessionData
     * @param data
     */
    updatePaymentData(paymentSessionData: PaymentSessionData, data: Data): Promise<PaymentSessionData>;
    /**
     * @deprecated use PaymentProcessor.initiatePayment instead
     * @param context The type of this argument is meant to be temporary and once the previous method signature
     * will be removed, the type will only be PaymentContext instead of Cart & PaymentContext
     */
    createPayment(context: Cart & PaymentContext): Promise<PaymentSessionResponse>;
    /**
     * @deprecated use createPayment(context: Cart & PaymentContext): Promise<PaymentSessionResponse> instead
     * @param cart
     */
    createPayment(cart: Cart): Promise<PaymentSessionData>;
    /**
     * @deprecated use PaymentProcessor.retrievePayment instead
     * @param paymentData
     */
    retrievePayment(paymentData: PaymentData): Promise<Data>;
    updatePayment(paymentSessionData: PaymentSessionData, context: Cart & PaymentContext): Promise<PaymentSessionData | PaymentSessionResponse>;
    /**
     * @deprecated use PaymentProcessor.updatePayment instead
     * @param paymentSessionData
     * @param cart
     */
    updatePayment(paymentSessionData: PaymentSessionData, cart: Cart): Promise<PaymentSessionData>;
    /**
     * @deprecated use PaymentProcessor.authorizePayment instead
     * @param paymentSession
     * @param context
     */
    authorizePayment(paymentSession: PaymentSession, context: Data): Promise<{
        data: PaymentSessionData;
        status: PaymentSessionStatus;
    }>;
    /**
     * @deprecated use PaymentProcessor.capturePayment instead
     * @param payment
     */
    capturePayment(payment: Payment): Promise<PaymentData>;
    /**
     * @deprecated use PaymentProcessor.refundPayment instead
     * @param payment
     * @param refundAmount
     */
    refundPayment(payment: Payment, refundAmount: number): Promise<PaymentData>;
    /**
     * @deprecated use PaymentProcessor.cancelPayment instead
     * @param payment
     */
    cancelPayment(payment: Payment): Promise<PaymentData>;
    /**
     * @deprecated use PaymentProcessor.cancelPayment instead
     * @param paymentSession
     */
    deletePayment(paymentSession: PaymentSession): Promise<void>;
    /**
     * @deprecated use PaymentProcessor.getSavedMethods instead
     * @param customer
     */
    retrieveSavedMethods(customer: Customer): Promise<Data[]>;
    /**
     * @deprecated use PaymentProcessor.getPaymentStatus instead
     * @param data
     */
    getStatus(data: Data): Promise<PaymentSessionStatus>;
}
/**
 * @deprecated use the AbstractPaymentProcessor instead
 */
export declare abstract class AbstractPaymentService extends TransactionBaseService implements PaymentService {
    protected constructor(container: unknown, config?: Record<string, unknown>);
    protected static identifier: string;
    getIdentifier(): string;
    /**
     * @deprecated
     */
    abstract getPaymentData(paymentSession: PaymentSession): Promise<PaymentData>;
    /**
     * @deprecated
     */
    abstract updatePaymentData(paymentSessionData: PaymentSessionData, data: Data): Promise<PaymentSessionData>;
    /**
     * @param context The type of this argument is meant to be temporary and once the previous method signature
     * will be removed, the type will only be PaymentContext instead of Cart & PaymentContext
     */
    abstract createPayment(context: Cart & PaymentContext): Promise<PaymentSessionResponse>;
    /**
     * @deprecated use createPayment(context: Cart & PaymentContext): Promise<PaymentSessionResponse> instead
     * @param cart
     */
    abstract createPayment(cart: Cart): Promise<PaymentSessionData>;
    /**
     * @deprecated
     */
    abstract retrievePayment(paymentData: PaymentData): Promise<Data>;
    /**
     * @param paymentSessionData
     * @param context The type of this argument is meant to be temporary and once the previous method signature
     * will be removed, the type will only be PaymentContext instead of Cart & PaymentContext
     * @return it return either a PaymentSessionResponse or PaymentSessionResponse["session_data"] to maintain backward compatibility
     */
    abstract updatePayment(paymentSessionData: PaymentSessionData, context: Cart & PaymentContext): Promise<PaymentSessionResponse | PaymentSessionResponse["session_data"]>;
    /**
     * @deprecated use updatePayment(paymentSessionData: PaymentSessionData, context: Cart & PaymentContext): Promise<PaymentSessionResponse> instead
     * @param paymentSessionData
     * @param cart
     */
    abstract updatePayment(paymentSessionData: PaymentSessionData, cart: Cart): Promise<PaymentSessionData>;
    /**
     * @deprecated
     */
    abstract authorizePayment(paymentSession: PaymentSession, context: Data): Promise<{
        data: PaymentSessionData;
        status: PaymentSessionStatus;
    }>;
    /**
     * @deprecated
     */
    abstract capturePayment(payment: Payment): Promise<PaymentData>;
    /**
     * @deprecated
     */
    abstract refundPayment(payment: Payment, refundAmount: number): Promise<PaymentData>;
    /**
     * @deprecated
     */
    abstract cancelPayment(payment: Payment): Promise<PaymentData>;
    /**
     * @deprecated
     */
    abstract deletePayment(paymentSession: PaymentSession): Promise<void>;
    /**
     * @deprecated
     */
    retrieveSavedMethods(customer: Customer): Promise<Data[]>;
    /**
     * @deprecated
     */
    abstract getStatus(data: Data): Promise<PaymentSessionStatus>;
}
/**
 * Return if the input object is one of AbstractPaymentService or PaymentService or AbstractPaymentPluginService
 * @param obj
 */
export declare function isPaymentService(obj: unknown): boolean;
