/**
 * Advanced Token Holdings Analyzer for Gorbchain SDK v2
 * Provides comprehensive token portfolio analysis with multi-program support
 */
import { EnhancedRpcClient, TokenHolding, TokenConfig } from '../rpc/enhancedClient.js';
export interface TokenPortfolio {
    walletAddress: string;
    holdings: TokenHolding[];
    summary: PortfolioSummary;
    timestamp: string;
}
export interface PortfolioSummary {
    totalTokens: number;
    totalNFTs: number;
    totalFungibleTokens: number;
    uniqueMints: number;
    hasMetadata: number;
    totalValue?: number;
    topHoldings: TokenHolding[];
}
export interface PortfolioAnalysis {
    diversification: {
        mintCount: number;
        largestHoldingPercentage: number;
        concentrationRisk: 'low' | 'medium' | 'high';
    };
    tokenTypes: {
        fungibleTokens: number;
        nfts: number;
        unknownTokens: number;
    };
    balanceDistribution: {
        zeroBalance: number;
        smallBalance: number;
        mediumBalance: number;
        largeBalance: number;
    };
}
export interface TokenMetadata {
    name?: string;
    symbol?: string;
    uri?: string;
    description?: string;
    image?: string;
    attributes?: Array<{
        trait_type: string;
        value: string | number;
    }>;
}
/**
 * Advanced Token Holdings Analyzer
 */
export declare class AdvancedTokenHoldings {
    private rpcClient;
    private networkConfig;
    constructor(rpcClient: EnhancedRpcClient);
    /**
     * Get all tokens for a wallet across all supported programs
     */
    getAllTokens(walletAddress: string, config?: TokenConfig): Promise<TokenPortfolio>;
    /**
     * Get tokens from a specific custom program
     */
    getCustomProgramTokens(walletAddress: string, programId: string): Promise<TokenHolding[]>;
    /**
     * Detect token decimals from mint account
     */
    detectTokenDecimals(mintAddress: string): Promise<number>;
    /**
     * Resolve token metadata (when available)
     */
    resolveTokenMetadata(mintAddress: string): Promise<TokenMetadata | null>;
    /**
     * Analyze portfolio for insights
     */
    analyzePortfolio(holdings: TokenHolding[]): Promise<PortfolioAnalysis>;
    /**
     * Get tokens by category (NFTs vs Fungible)
     */
    getTokensByCategory(walletAddress: string): Promise<{
        nfts: TokenHolding[];
        fungibleTokens: TokenHolding[];
    }>;
    /**
     * Get top holdings by balance
     */
    getTopHoldings(walletAddress: string, limit?: number): Promise<TokenHolding[]>;
    /**
     * Enhance holdings with additional metadata and analysis
     */
    private enhanceHoldings;
    /**
     * Generate portfolio summary
     */
    private generatePortfolioSummary;
    /**
     * Batch process multiple wallets
     */
    batchAnalyzeWallets(walletAddresses: string[], config?: TokenConfig): Promise<TokenPortfolio[]>;
    /**
     * Utility function to chunk array into smaller arrays
     */
    private chunkArray;
    /**
     * Compare portfolios to find similarities
     */
    comparePortfolios(walletAddress1: string, walletAddress2: string): Promise<{
        commonTokens: TokenHolding[];
        uniqueToWallet1: TokenHolding[];
        uniqueToWallet2: TokenHolding[];
        similarity: number;
    }>;
}
