import React from "react";
import WalletSDK from "../index";
import { TokenInfo, OutputDetails, OptimalSourceTokenDistributionResponse, OptimalSourceTokenDistributionInput, ComputeQuoteResponse, ComputeQuoteInput, SourceTokensInput, SourceTokensResponse } from "../services/services";
import { CalculateQuoteInput, CalculateQuoteResponse, ExecuteSwapInput, ExecuteSwapResponse, GetQuoteForActionInput, GetQuoteForActionResponse, ExecuteActionInput, ExecuteActionResponse } from "../services/quoteServices";
import { swapToken } from "../types/swap";
import { ProtocolProvider } from "./utils";
import { ThemeMode, CornerRadius, WalletConfig, Theme } from "../types/theme";
interface SwapParams {
    fromToken: swapToken;
    toToken: Omit<swapToken, "amount">;
    showMessagePopup?: boolean;
    messageType?: "success" | "error";
    transactionId?: string;
}
interface TransferParams {
    inputToken: {
        symbol?: string;
        name?: string;
        address: string;
        chainId: number;
        decimals?: number;
        balance?: string;
        logoURI?: string;
        chainIds?: {
            chainId: number;
            address: string;
            balance?: string;
        }[];
    };
    inputAmount?: string;
    recipient: string;
}
interface HeadlessTransferParams {
    inputToken: {
        symbol?: string;
        name?: string;
        address: string;
        chainId: number;
        decimals?: number;
        balance?: string;
        logoURI?: string;
        chainIds?: {
            chainId: number;
            address: string;
            balance?: string;
        }[];
    };
    inputAmount: string;
    recipient: string;
}
interface QuoteParams {
    fromToken: {
        amount: string;
        chainId: number;
        tokenAddress: string;
        metadata?: {
            tokenName: string;
            tokenSymbol: string;
            decimals: number;
            logoURI: string;
            chainIds: {
                chainId: number;
                address: string;
            }[];
        };
    };
    toToken: {
        chainId: number;
        tokenAddress: string;
        metadata?: {
            tokenName: string;
            tokenSymbol: string;
            decimals: number;
            logoURI: string;
            chainIds: {
                chainId: number;
                address: string;
            }[];
        };
    };
    provider?: ProtocolProvider;
}
interface WalletContextType {
    walletSDK: WalletSDK | null;
    isLoggedIn: boolean;
    username: string | null;
    evmWalletAddress: string | null;
    solanaAddress: string | null;
    bitcoinWalletAddress: string | null;
    balance: any | null;
    connect: () => void;
    openWalletModal: () => void;
    disconnect: () => void;
    swap: (params: SwapParams) => void;
    executeTransfer: (params: TransferParams) => void;
    executeHeadlessTransfer: (params: HeadlessTransferParams) => Promise<any>;
    tokenOptions: TokenInfo[];
    tokensLoading: boolean;
    refreshTokenOptions: () => Promise<void>;
    cryptoBalance: any;
    loading: boolean;
    setLoading: (loading: boolean) => void;
    refreshBalance: (showLoading?: boolean) => Promise<void>;
    showActivity: boolean;
    setShowActivity: (showActivity: boolean) => void;
    activity: any;
    setActivity: (activity: any) => void;
    calculateDemoQuote: (params: QuoteParams) => Promise<OutputDetails | string>;
    headlessSwap: (params: QuoteParams) => Promise<any>;
    getOptimalSourceTokenDistribution: (params: OptimalSourceTokenDistributionInput) => Promise<OptimalSourceTokenDistributionResponse | null>;
    computeQuote: (params: ComputeQuoteInput) => Promise<ComputeQuoteResponse | null>;
    getSourceTokensFromTokenIdentifier: (params: SourceTokensInput) => Promise<SourceTokensResponse | null>;
    calculateQuote: (params: CalculateQuoteInput) => Promise<CalculateQuoteResponse | null>;
    executeSwap: (params: ExecuteSwapInput) => Promise<ExecuteSwapResponse | null>;
    getQuoteForAction: (params: GetQuoteForActionInput) => Promise<GetQuoteForActionResponse | null>;
    executeAction: (params: ExecuteActionInput) => Promise<ExecuteActionResponse | null>;
    theme: ThemeMode;
    walletCornerRadius: CornerRadius;
    config: WalletConfig;
    currentTheme: Theme;
    loginWithRedirect: () => void;
    handlePopupMessage: (event: MessageEvent) => void;
    isPopupAuthenticated: boolean;
    popupLoginData: any;
}
export declare const useWallet: () => WalletContextType;
interface WalletProviderProps {
    children: React.ReactNode;
    config: WalletConfig;
}
export declare const WalletProvider: React.FC<WalletProviderProps>;
export {};
