import { PayType } from '@soundsright/types';
import { NftBuyByCurrencyOptions, NftBuyByErc20Options, NftBuyOptions, NftBuyByETHOptions } from '../types';
import Base from './base';
export declare class NftMarket extends Base {
    /**
     *
     * @param payType - 支付类型枚举：enum PayType { ETH = 'ETH', Erc20 = 'Erc20', Currency = 'Currency' }
     * @param options - 支付选项：NftBuyOptions
     * ```ts
     * NftBuyOptions = NftBuyByETHOptions | NftBuyByErc20Options | NftBuyByCurrencyOptions
     * // 当payType为PayType.ETH时：
     * type NftBuyByETHOptions = {
     *     skuId: string;
     *     beforeSwitchChain?: (e: SwitchChainData) => Promise<void> | void; // 钩子函数 - 切换链之前；SwitchChainData = { targetChainId: number, oldChainId: number }
     *     switchChainSuccess?: (e: SwitchChainData) => void;  // 钩子函数 - 切换链成功；SwitchChainData = { targetChainId: number, oldChainId: number }
     *     switchChainFailed?: (e: Error & SwitchChainData) => void;  // 钩子函数 - 切换链失败；SwitchChainData = { targetChainId: number, oldChainId: number }
     *     beforeOrder?: () => Promise<void> | void; // 钩子函数 - 创建订单前
     *     afterOrder?: (apiData: any) => Promise<void> | void; // 钩子函数 - 创建订单后
     *     beforeExchange?: () => Promise<void> | void; // 钩子函数 - 交易合约前
     * };
     * // 当payType为PayType.Erc20时：
     * type NftBuyByErc20Options = {
     *     skuId: string;
     *     beforeSwitchChain?: (e: SwitchChainData) => Promise<void> | void; // 钩子函数 - 切换链之前；SwitchChainData = { targetChainId: number, oldChainId: number }
     *     switchChainSuccess?: (e: SwitchChainData) => void;  // 钩子函数 - 切换链成功；SwitchChainData = { targetChainId: number, oldChainId: number }
     *     switchChainFailed?: (e: Error & SwitchChainData) => void;  // 钩子函数 - 切换链失败；SwitchChainData = { targetChainId: number, oldChainId: number }
     *     beforeOrder?: () => Promise<void> | void; // 钩子函数 - 创建订单前
     *     afterOrder?: (apiData: any) => Promise<void> | void; // 钩子函数 - 创建订单后
     *     beforeQueryBalance?: () => Promise<void> | void;  // 钩子函数 - 查询余额前。如果sku价格为0，不会执行
     *     afterQueryBalance?: (balance: string) => Promise<void> | void;  // 钩子函数 - 查询余额后。如果sku价格为0，不会执行
     *     beforeApprove?: () => Promise<void> | void; // 钩子函数 - Approval合约之前。如果sku价格为0，不会执行
     *     beforeExchange?: () => Promise<void> | void; // 钩子函数 - 交易合约前
     *     checkBalance?: boolean; // 默认为true，执行购买前优先检查erc余额。如果sku价格为0，无效
     * };
     * // 当payType为PayType.Currency时：
     * type NftBuyByCurrencyOptions = {
     *     skuId: string;
     *     payChannel: PayChannel; // enum PayChannel { Checkout = 1 }
     *     channelOptions?: object; // 支付渠道要求的参数。对于checkout，需要{ payType: 1, countryCode: int型国家编码, userAddress: 国家代码 }  国家代码可选值：GB 英国、US 美国、JP 日本、KR 韩国、SG 新加坡、PH 菲律宾、AE 迪拜、IO 印度
     *     beforeOrder?: () => Promise<void> | void; // 钩子函数 - 创建订单前
     *     beforePay?: (order: any) => Promise<void> | void; // 钩子函数 - 支付前
     *     paySuccess?: () => Promise<void> | void; // 钩子函数 - 支付成功
     *     payCancel?: () => void; // 钩子函数 - 支付取消
     * };
     * ```
     * @returns Promise<void>，若异常会抛出相应的Error
     */
    buyAndMint(payType: PayType, options: NftBuyOptions): Promise<void>;
    buyAndMintByETH(options: NftBuyByETHOptions): Promise<void>;
    buyAndMintByErc20(options: NftBuyByErc20Options): Promise<void>;
    buyAndMintByCurrency(options: NftBuyByCurrencyOptions): Promise<void>;
    queryCurrencyOrderStatus(orderNo: number): Promise<any>;
}
