import { IPaymentMethod } from '../../common/interface/payment.interface';
import { DefaultParams } from '../../common/interface/request.interface';
export interface VoucherServiceInterface {
    validateVoucher<PAYMENT_METHODS>({ query, headers, voucher, paymentMethod, }: ValidateVoucherParams<PAYMENT_METHODS>): Promise<Record<string, unknown>>;
    resetVoucher<PAYMENT_METHODS>({ query, headers, host, paymentMethod, }: ResetVoucherParams<PAYMENT_METHODS>): Promise<Record<string, unknown>>;
    voucherPageLoad<T>({ query, headers, data, }: VoucherPageLoadParams<T & Record<string, unknown>>): Promise<T>;
}
export declare type TVoucherMapper<PAYMENT_METHODS extends string> = {
    [key in PAYMENT_METHODS]?: IApplyVoucherPayload<PAYMENT_METHODS>;
};
export interface IApplyVoucherPayload<PAYMENT_METHODS> {
    paymentMethod: PAYMENT_METHODS;
    voucherCode: string;
    bankPrefixCode?: string;
}
export interface ApplyVoucherParams<PAYMENT_METHODS> extends DefaultParams {
    body: IApplyVoucherPayload<PAYMENT_METHODS>;
}
export interface ValidateVoucherParams<PAYMENT_METHODS> extends DefaultParams {
    voucher: Record<string, unknown>;
    paymentMethod: PAYMENT_METHODS;
}
export interface ResetVoucherParams<PAYMENT_METHODS> extends DefaultParams {
    paymentMethod: PAYMENT_METHODS;
}
export interface VoucherPageLoadParams<ICheckoutState> extends DefaultParams {
    data?: ICheckoutState;
}
export declare type IPropertiesToAdd<T, PAYMENT_METHODS> = T & {
    paymentOptions: IPaymentMethod<PAYMENT_METHODS>[];
    order: {
        voucher: Record<string, unknown>;
    };
};
