import { ethers } from "ethers";
import { OdysseyZebecCard, Token, Weth, ZebecCard } from "./artifacts";
import { CardConfig, CardPurchaseOfDay, CardTypeId, FeeTier, SupportedChainId, SwapAndBuyCardParams, SwapData } from "./types";
/**
 * A class which holds methods and properties to interact with Zebec Instanct Card evm contracts.
 * @example
 *
 * const signer = <ethers.Signer Instance> // most wallet provider have way to create signer
 * const chainId = 11155111 // sepolia;
 * const service = new ZebecCardService(signer, chainId);
 *
 */
export declare class ZebecCardService {
    readonly signer: ethers.Signer;
    readonly chainId: SupportedChainId;
    readonly zebecCard: ZebecCard | OdysseyZebecCard;
    readonly usdcToken: Token;
    readonly weth: Weth;
    /**
     * Create instance of ZebecCardService.
     * @param signer ethers signer
     * @param chainId chain ID supported by sdk
     */
    constructor(signer: ethers.Signer, chainId: SupportedChainId);
    /**
     *	Sets Native Fee in card config.
     *
     *  Can only be invoked admin.
     *
     * @param params
     * @returns
     */
    setNativeFee(params: {
        feeInPercent: string;
    }): Promise<ethers.ContractTransactionResponse>;
    /**
     * Sets NonNative Fee in card config
     *
     * Can only be invoked admin.
     *
     * @param params
     * @returns
     */
    setNonNativeFee(params: {
        feeInPercent: string;
    }): Promise<ethers.ContractTransactionResponse>;
    /**
     * Sets Revenue Fee in card config
     *
     * Can only be invoked admin.
     *
     * @param params
     * @returns
     */
    setRevenueFee(params: {
        feeInPercent: string;
    }): Promise<ethers.ContractTransactionResponse>;
    /**
     * Sets Revenue vault address in card config
     *
     * Can only be invoked admin.
     *
     * @param params
     * @returns
     */
    setRevenueVault(params: {
        vaultAddress: ethers.AddressLike;
    }): Promise<ethers.ContractTransactionResponse>;
    /**
     * Sets commission vault address in card config
     *
     * Can only be invoked admin.
     *
     * @param params
     * @returns
     */
    setCommissionVault(params: {
        vaultAddress: ethers.AddressLike;
    }): Promise<ethers.ContractTransactionResponse>;
    /**
     * Sets card vault address in card config
     *
     * Can only be invoked admin.
     *
     */
    setCardVault(params: {
        vaultAddress: ethers.AddressLike;
    }): Promise<ethers.ContractTransactionResponse>;
    /**
     * Sets usdc address in card config
     * Can only be invoked by admin
     */
    setUsdcAddress(params: {
        tokenAddress: ethers.AddressLike;
    }): Promise<ethers.ContractTransactionResponse>;
    /**
     * Sets minimum card amount for purchasing card in card config
     */
    setMinCardAmount(params: {
        minCardAmount: string;
    }): Promise<ethers.ContractTransactionResponse>;
    /**
     * Sets maximum card amount for purchasing card  in card config
     */
    setMaxCardAmount(params: {
        maxCardAmount: string;
    }): Promise<ethers.ContractTransactionResponse>;
    /**
     * Sets daily card purchase limit in card config
     */
    setDailyCardPurchaseLimit(params: {
        dailyCardPurchaseLimit: string;
    }): Promise<ethers.ContractTransactionResponse>;
    /**
     * Updates fee for given min - max (range) amount and inserts if range in not found.
     */
    setFee(params: {
        minAmount: string;
        maxAmount: string;
        feePercent: string;
    }): Promise<ethers.ContractTransactionResponse>;
    /**
     * Sets fee tiers only be invoked by admin
     */
    setFeeTiers(params: {
        feeTiers: FeeTier[];
    }): Promise<ethers.ContractTransactionResponse>;
    private _parseFeeTiers;
    setCustomFee(params: {
        tokenAddress: string;
        fee: number | string;
    }): Promise<ethers.ContractTransactionResponse>;
    getCustomFee(params: {
        tokenAddress: string;
    }): Promise<string>;
    /**
     * Deposits usdc to user vault
     * @param params
     * @returns
     */
    depositUsdc(params: {
        amount: string;
    }): Promise<ethers.ContractTransactionResponse>;
    /**
     * Withdraw usdc from user vault
     * @param params
     * @returns
     */
    withdraw(params: {
        amount: string;
    }): Promise<ethers.ContractTransactionResponse>;
    /**
     * Transfer specified amount from user's vault balance to card vault with some fee amount for card purchase.
     * @param params
     * @returns
     */
    buyCard(params: {
        amount: string;
        cardTypeId: CardTypeId;
        buyerEmail: string;
    }): Promise<ethers.ContractTransactionResponse>;
    /**
     * Swaps given src token to usdc and transfers to user's vault
     * @param params
     * @param overrides
     * @returns
     */
    swapAndDeposit(params: Omit<SwapData, "gas" | "gasPrice">, overrides?: ethers.Overrides): Promise<ethers.ContractTransactionResponse>;
    buyCardDirect(params: {
        amount: string;
        cardTypeId: CardTypeId;
        buyerEmail: string;
    }): Promise<ethers.ContractTransactionResponse>;
    swapAndBuyCardDirect(params: SwapAndBuyCardParams, overrides?: ethers.Overrides): Promise<ethers.ContractTransactionResponse>;
    /**
     * Deposit usdc from user's vault to yield provider
     * @param params
     * @returns
     */
    generateYield(params: {
        amount: string;
    }): Promise<ethers.ContractTransactionResponse>;
    /**
     *  Withdaw deposits and yield from yield provider
     * @param params
     * @returns
     */
    withdrawYield(params: {
        amount: string;
    }): Promise<ethers.ContractTransactionResponse>;
    /**
     * Gets user's vault balance
     * @param params
     * @returns
     */
    getUserBalance(params: {
        userAddress: ethers.AddressLike;
    }): Promise<string>;
    /**
     * Gets user's card purchase
     * @param params
     * @returns
     */
    getCardPurhcaseOfDay(params: {
        userAddress: ethers.AddressLike;
    }): Promise<CardPurchaseOfDay>;
    /**
     * Gets Zebec Instant Card contract configs
     * @returns
     */
    getCardConfig(): Promise<CardConfig>;
    /**
     * Gets fee tiers
     * @returns Array of fee tier
     */
    getFeeTiers(): Promise<Array<FeeTier>>;
    /**
     * Gets admin adddress
     * @returns
     */
    getAdmin(): Promise<string>;
    /**
     * add allowance of given amount of given token to given spender
     * @param params
     * @returns
     */
    approve(params: {
        token: string;
        spender: ethers.AddressLike;
        amount: string;
    }): Promise<ethers.ContractTransactionResponse | null>;
    /**
     * Wrap ETH to Wrapped ETH
     * @param param
     * @returns
     */
    wrapEth(param: {
        amount: string;
    }): Promise<ethers.ContractTransactionResponse>;
}
