import { PublicKey } from '@solana/web3.js';
import { Program, AnchorProvider } from '@coral-xyz/anchor';
import { MerkleDistributor as MerkleDistributorAccount, ClaimStatus, CreateDistributorArgs, ClaimArgs, ClaimLockedArgs } from './types';
/**
 * MerkleDistributor SDK class providing a clean interface to the Anchor program
 */
export declare class MerkleDistributor {
    readonly program: Program;
    readonly provider: AnchorProvider;
    readonly programId: PublicKey;
    constructor(provider: AnchorProvider, programId?: PublicKey);
    /**
     * Creates a new merkle distributor
     * @param args CreateDistributorArgs
     * @returns Transaction signature
     */
    createDistributor(args: CreateDistributorArgs): Promise<string>;
    /**
     * Claims tokens from the distributor
     * @param args ClaimArgs
     * @returns Transaction signature
     */
    claim(args: ClaimArgs): Promise<string>;
    /**
     * Claims locked tokens after vesting period
     * @param args ClaimLockedArgs
     * @returns Transaction signature
     */
    claimLocked(args: ClaimLockedArgs): Promise<string>;
    /**
     * Claws back remaining tokens to the clawback receiver
     * @param distributor Distributor public key
     * @param claimant Claimant public key (can be anyone after clawback period)
     * @returns Transaction signature
     */
    clawback(distributor: PublicKey, claimant: PublicKey): Promise<string>;
    /**
     * Sets a new admin for the distributor
     * @param distributor Distributor public key
     * @param currentAdmin Current admin public key
     * @param newAdmin New admin public key
     * @returns Transaction signature
     */
    setAdmin(distributor: PublicKey, currentAdmin: PublicKey, newAdmin: PublicKey): Promise<string>;
    /**
     * Sets a new clawback receiver for the distributor
     * @param distributor Distributor public key
     * @param newClawbackReceiver New clawback receiver public key
     * @param admin Admin public key
     * @returns Transaction signature
     */
    setClawbackReceiver(distributor: PublicKey, newClawbackReceiver: PublicKey, admin: PublicKey): Promise<string>;
    /**
     * Fetches a distributor account
     * @param distributor Distributor public key
     * @returns MerkleDistributor account data
     */
    getDistributor(distributor: PublicKey): Promise<MerkleDistributorAccount>;
    /**
     * Fetches a claim status account
     * @param claimStatus Claim status public key
     * @returns ClaimStatus account data
     */
    getClaimStatus(claimStatus: PublicKey): Promise<ClaimStatus>;
    /**
     * Fetches claim status for a specific claimant and distributor
     * @param claimant Claimant public key
     * @param distributor Distributor public key
     * @returns ClaimStatus account data or null if not found
     */
    getClaimStatusForClaimant(claimant: PublicKey, distributor: PublicKey): Promise<ClaimStatus | null>;
    /**
     * Checks if a claimant has already claimed
     * @param claimant Claimant public key
     * @param distributor Distributor public key
     * @returns Boolean indicating if tokens have been claimed
     */
    hasClaimed(claimant: PublicKey, distributor: PublicKey): Promise<boolean>;
    /**
     * Queries all existing distributors for a given mint
     * @param mint The mint to query distributors for
     * @param maxVersion Maximum version to check (default: 100)
     * @returns Map of version to distributor info
     */
    queryDistributorsForMint(mint: PublicKey, maxVersion?: number): Promise<Map<bigint, {
        pda: PublicKey;
        account: MerkleDistributorAccount;
        version: bigint;
    }>>;
    /**
     * Finds the next available version for a mint
     * @param mint The mint to find next version for
     * @param startFrom Starting version to check from (default: 0)
     * @param maxCheck Maximum version to check (default: 1000)
     * @returns Next available version number
     */
    findNextAvailableVersion(mint: PublicKey, startFrom?: bigint, maxCheck?: number): Promise<bigint>;
    /**
     * Gets a comprehensive overview of distributions for a mint
     * @param mint The mint to get overview for
     * @param maxVersion Maximum version to check (default: 100)
     * @returns Distribution overview with used versions, next available, and stats
     */
    getDistributionOverview(mint: PublicKey, maxVersion?: number): Promise<{
        mint: PublicKey;
        usedVersions: bigint[];
        nextAvailableVersion: bigint;
        totalDistributors: number;
        totalClaimed: bigint;
        totalUnclaimed: bigint;
        distributors: Map<bigint, {
            pda: PublicKey;
            account: MerkleDistributorAccount;
            version: bigint;
            claimedAmount: bigint;
            remainingAmount: bigint;
        }>;
    }>;
    /**
     * Checks if a version is available for a mint
     * @param mint The mint to check
     * @param version The version to check
     * @returns Boolean indicating if version is available
     */
    isVersionAvailable(mint: PublicKey, version: bigint): Promise<boolean>;
    /**
     * Gets the PDA for a specific mint and version
     * @param mint The mint
     * @param version The version
     * @returns [PDA, bump] tuple
     */
    getDistributorPDA(mint: PublicKey, version: bigint): [PublicKey, number];
    /**
     * Batch check multiple versions for availability
     * @param mint The mint to check versions for
     * @param versions Array of versions to check
     * @returns Map of version to availability status
     */
    batchCheckVersions(mint: PublicKey, versions: bigint[]): Promise<Map<bigint, boolean>>;
}
