/// <reference types="bn.js" />
/// <reference types="@coral-xyz/anchor/node_modules/@solana/web3.js" />
import { BN, Program } from "@coral-xyz/anchor";
import { PublicKey, TransactionInstruction } from "@solana/web3.js";
import { ZebecCardContract } from "./idl";
type CardType = "reloadable" | "non_reloadable";
/**
 * Data required while depositing
 */
export type DepositInstructionData = {
    amount: BN;
    sourceTokenAddress?: PublicKey;
};
export type ParsedFeeTier = {
    minAmount: BN;
    maxAmount: BN;
    fee: BN;
};
export type ParsedTokenFeeStruct = {
    tokenAddress: PublicKey;
    fee: BN;
};
export type ParsedTokenFeeList = ParsedTokenFeeStruct[];
export type InitCardConfigInstructionData = {
    cardVault: PublicKey;
    revenueVault: PublicKey;
    commissionVault: PublicKey;
    revenueFee: BN;
    nativeFee: BN;
    nonNativeFee: BN;
    maxCardAmount: BN;
    minCardAmount: BN;
    dailyCardPurchaseLimit: BN;
    feeTiers: ParsedFeeTier[];
};
export type SetCardConfigInstructionData = {
    newZicOwner: PublicKey;
    cardVault: PublicKey;
    revenueVault: PublicKey;
    commissionVault: PublicKey;
    revenueFee: BN;
    nativeFee: BN;
    nonNativeFee: BN;
    maxCardAmount: BN;
    minCardAmount: BN;
    dailyCardPurchaseLimit: BN;
    feeTiers: ParsedFeeTier[];
};
export type BuyPrepaidDigitalCardInstructionData = {
    amount: BN;
    cardType: CardType;
    index: BN;
};
export type BuyCardDirectInstructionData = {
    amount: BN;
    cardType: CardType;
    index: BN;
    sourceTokenAddress?: PublicKey;
};
export type BuyCardBotInstructionData = {
    amount: BN;
    sourceTokenAddress: PublicKey;
    userId: string;
    cardType: CardType;
};
export type InitBotConfigData = {
    botAdmin: PublicKey;
};
export type IntiBotPdaData = {
    userId: string;
};
export type SetBotAdminData = {
    newAdmin: PublicKey;
};
export type ParsedCardConfigInfo = {
    index: BN;
    zicOwner: PublicKey;
    nativeFee: BN;
    nonNativeFee: BN;
    revenueFee: BN;
    usdcMint: PublicKey;
    revenueVault: PublicKey;
    commissionVault: PublicKey;
    cardVault: PublicKey;
    totalBought: BN;
    dailyCardBuyLimit: BN;
    providerConfig: ParsedProviderConfig;
};
export type ParsedProviderConfig = {
    minCardAmount: BN;
    maxCardAmount: BN;
    feeTiers: {
        tiers: ParsedFeeTier[];
    };
};
export type IntiOnRampUserCustodyData = {
    userId: string;
};
export type InitOnRampInstructionData = {
    admin: PublicKey;
    zbcnToken: PublicKey;
};
export type SetOnRampAdminInstructionData = {
    newAdmin: PublicKey;
};
export type OnRampTransferZbcnInstructionData = {
    amount: BN;
    userId: string;
};
/**
 * Zebec Card Instruction Factory
 */
export declare class ZebecCardInstructions {
    readonly cardProgram: Program<ZebecCardContract>;
    constructor(cardProgram: Program<ZebecCardContract>);
    getInitCardConfigsInstruction(cardPda: PublicKey, usdcToken: PublicKey, zicOwner: PublicKey, data: InitCardConfigInstructionData): Promise<TransactionInstruction>;
    getDepositInstruction(cardPda: PublicKey, feeMapPda: PublicKey, tokenMint: PublicKey, user: PublicKey, userAta: PublicKey, userVault: PublicKey, userVaultAta: PublicKey, userPurchaseRecord: PublicKey, revenueVault: PublicKey, revenueVaultAta: PublicKey, data: DepositInstructionData): Promise<TransactionInstruction>;
    getSetCardConfigsInstruction(cardPda: PublicKey, zicOwner: PublicKey, data: SetCardConfigInstructionData): Promise<TransactionInstruction>;
    getWithdrawInstruction(user: PublicKey, tokenMint: PublicKey, userAta: PublicKey, userVault: PublicKey, userVaultAta: PublicKey, userPurchaseRecord: PublicKey, amount: BN): Promise<TransactionInstruction>;
    getBuyPrepaidDigitalCardInstruction(buyerPda: PublicKey, cardPda: PublicKey, cardVault: PublicKey, cardVaultAta: PublicKey, commissionVault: PublicKey, commissionVaultAta: PublicKey, revenueVault: PublicKey, revenueVaultAta: PublicKey, usdcToken: PublicKey, user: PublicKey, userVault: PublicKey, userVaultAta: PublicKey, userPurchaseRecord: PublicKey, buyCardData: BuyPrepaidDigitalCardInstructionData): Promise<TransactionInstruction>;
    getGenerateYieldInstruction(user: PublicKey, userVault: PublicKey, userPurchaseRecord: PublicKey, userVaultAta: PublicKey, tokenMint: PublicKey, flexlendUserAccount: PublicKey, flexlendUserAta: PublicKey, promotionReservePda: PublicKey, reserveAdmin: PublicKey, amount: BN): Promise<TransactionInstruction>;
    getWithdrawYieldInstruction(user: PublicKey, userPurchaseRecord: PublicKey, userVault: PublicKey, userVaultAta: PublicKey, tokenMint: PublicKey, flexlendUserAccount: PublicKey, flexlendUserAta: PublicKey, promotionReserve: PublicKey, amount: BN, withdrawAll: boolean): Promise<TransactionInstruction>;
    getBuyCardDirectInstruction(buyerPda: PublicKey, cardPda: PublicKey, cardVault: PublicKey, cardVaultAta: PublicKey, feeMapPda: PublicKey, revenueVault: PublicKey, revenueVaultAta: PublicKey, usdcToken: PublicKey, user: PublicKey, userAta: PublicKey, userPurchaseRecord: PublicKey, buyCardData: BuyCardDirectInstructionData): Promise<TransactionInstruction>;
    getSetCustomFeesInstruction(cardPda: PublicKey, feeMapPda: PublicKey, zicOwner: PublicKey, tokenFeeList: ParsedTokenFeeList): Promise<TransactionInstruction>;
    getDeleteCustomFeesInstruction(cardPda: PublicKey, feeMapPda: PublicKey, zicOwner: PublicKey, tokenFeeList: PublicKey[]): Promise<TransactionInstruction>;
    getInitBotConfigInstruction(cardBotConfig: PublicKey, cardPda: PublicKey, zicOwner: PublicKey, data: InitBotConfigData): Promise<TransactionInstruction>;
    getSetBotAdminInstruction(cardBotConfig: PublicKey, cardPda: PublicKey, zicOwner: PublicKey, data: SetBotAdminData): Promise<TransactionInstruction>;
    getInitBotUserCustodyInstruction(botAdmin: PublicKey, cardBotConfig: PublicKey, usdcToken: PublicKey, userCustody: PublicKey, userCustodyAta: PublicKey, data: IntiBotPdaData): Promise<TransactionInstruction>;
    getBuyCardBotInstruction(botAdmin: PublicKey, cardBotConfig: PublicKey, cardPda: PublicKey, cardVault: PublicKey, cardVaultAta: PublicKey, feeMapPda: PublicKey, revenueVault: PublicKey, revenueVaultAta: PublicKey, usdcToken: PublicKey, userCustody: PublicKey, userCustodyAta: PublicKey, buyCardData: BuyCardBotInstructionData): Promise<TransactionInstruction>;
    getInitOnRampInstruction(zicOwner: PublicKey, cardConfig: PublicKey, onRampConfig: PublicKey, data: InitOnRampInstructionData): Promise<TransactionInstruction>;
    getInitOnRampUserCustodyInstruction(admin: PublicKey, onRampConfig: PublicKey, onRampUserCustody: PublicKey, onRampUserCustodyZbcnAccount: PublicKey, zbcnToken: PublicKey, data: IntiOnRampUserCustodyData): Promise<TransactionInstruction>;
    getSetOnRampAdminInstruction(cardConfig: PublicKey, onRampConfig: PublicKey, zicOwner: PublicKey, data: SetOnRampAdminInstructionData): Promise<TransactionInstruction>;
    getOnRampTransferZbcnInstruction(onRampAdmin: PublicKey, onRampConfig: PublicKey, onRampUserCustody: PublicKey, onRampUserCustodyZbcnAccount: PublicKey, receiverAccount: PublicKey, receiverZbcnAccount: PublicKey, zbcnToken: PublicKey, data: OnRampTransferZbcnInstructionData): Promise<TransactionInstruction>;
}
export {};
