import { HCS10Client } from '../hcs10/HCS10Client';
import { StructuredTool } from '@langchain/core/tools';
import { z } from 'zod';
import { IStateManager } from '../state/state-types';
/**
 * RegisterAgentTool wraps the createAndRegisterAgent() function of HCS10Client.
 * It creates and registers an agent on Hedera using the HCS-10 standard SDK flow.
 * On success, returns a JSON string containing the new agent's details (including private key).
 */
export declare class RegisterAgentTool extends StructuredTool {
    name: string;
    description: string;
    private client;
    private stateManager?;
    schema: z.ZodObject<{
        name: z.ZodString;
        description: z.ZodOptional<z.ZodString>;
        type: z.ZodOptional<z.ZodEnum<["autonomous", "manual"]>>;
        model: z.ZodOptional<z.ZodString>;
        capabilities: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
        profilePicture: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodObject<{
            url: z.ZodString;
            filename: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            url: string;
            filename: string;
        }, {
            url: string;
            filename: string;
        }>, z.ZodObject<{
            path: z.ZodString;
            filename: z.ZodOptional<z.ZodString>;
        }, "strip", z.ZodTypeAny, {
            path: string;
            filename?: string | undefined;
        }, {
            path: string;
            filename?: string | undefined;
        }>]>>;
        feeCollectorAccountId: z.ZodOptional<z.ZodString>;
        hbarFee: z.ZodOptional<z.ZodNumber>;
        tokenFee: z.ZodOptional<z.ZodObject<{
            amount: z.ZodNumber;
            tokenId: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            amount: number;
            tokenId: string;
        }, {
            amount: number;
            tokenId: string;
        }>>;
        hbarFees: z.ZodOptional<z.ZodArray<z.ZodObject<{
            amount: z.ZodNumber;
            collectorAccount: z.ZodOptional<z.ZodString>;
        }, "strip", z.ZodTypeAny, {
            amount: number;
            collectorAccount?: string | undefined;
        }, {
            amount: number;
            collectorAccount?: string | undefined;
        }>, "many">>;
        tokenFees: z.ZodOptional<z.ZodArray<z.ZodObject<{
            amount: z.ZodNumber;
            tokenId: z.ZodString;
            collectorAccount: z.ZodOptional<z.ZodString>;
        }, "strip", z.ZodTypeAny, {
            amount: number;
            tokenId: string;
            collectorAccount?: string | undefined;
        }, {
            amount: number;
            tokenId: string;
            collectorAccount?: string | undefined;
        }>, "many">>;
        exemptAccountIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
        setAsCurrent: z.ZodOptional<z.ZodBoolean>;
        persistence: z.ZodOptional<z.ZodObject<{
            prefix: z.ZodOptional<z.ZodString>;
        }, "strip", z.ZodTypeAny, {
            prefix?: string | undefined;
        }, {
            prefix?: string | undefined;
        }>>;
    }, "strip", z.ZodTypeAny, {
        name: string;
        capabilities?: number[] | undefined;
        type?: "autonomous" | "manual" | undefined;
        description?: string | undefined;
        model?: string | undefined;
        profilePicture?: string | {
            url: string;
            filename: string;
        } | {
            path: string;
            filename?: string | undefined;
        } | undefined;
        feeCollectorAccountId?: string | undefined;
        hbarFee?: number | undefined;
        tokenFee?: {
            amount: number;
            tokenId: string;
        } | undefined;
        hbarFees?: {
            amount: number;
            collectorAccount?: string | undefined;
        }[] | undefined;
        tokenFees?: {
            amount: number;
            tokenId: string;
            collectorAccount?: string | undefined;
        }[] | undefined;
        exemptAccountIds?: string[] | undefined;
        setAsCurrent?: boolean | undefined;
        persistence?: {
            prefix?: string | undefined;
        } | undefined;
    }, {
        name: string;
        capabilities?: number[] | undefined;
        type?: "autonomous" | "manual" | undefined;
        description?: string | undefined;
        model?: string | undefined;
        profilePicture?: string | {
            url: string;
            filename: string;
        } | {
            path: string;
            filename?: string | undefined;
        } | undefined;
        feeCollectorAccountId?: string | undefined;
        hbarFee?: number | undefined;
        tokenFee?: {
            amount: number;
            tokenId: string;
        } | undefined;
        hbarFees?: {
            amount: number;
            collectorAccount?: string | undefined;
        }[] | undefined;
        tokenFees?: {
            amount: number;
            tokenId: string;
            collectorAccount?: string | undefined;
        }[] | undefined;
        exemptAccountIds?: string[] | undefined;
        setAsCurrent?: boolean | undefined;
        persistence?: {
            prefix?: string | undefined;
        } | undefined;
    }>;
    /**
     * Creates a new RegisterAgentTool instance
     * @param client - Instance of HCS10Client (already configured with operator/network)
     * @param stateManager - Optional state manager to store agent details
     */
    constructor(client: HCS10Client, stateManager?: IStateManager);
    /**
     * Loads a profile picture from a local file or URL and returns a buffer
     * @param profilePicture - Local file path or URL
     * @returns Object containing buffer and filename
     */
    private loadProfilePicture;
    /**
     * Calls createAndRegisterAgent() with the provided metadata.
     * Returns a JSON string with agent details on success, or an error string.
     */
    _call(input: z.infer<typeof this.schema>): Promise<string>;
    /**
     * Checks if the token fee configuration is valid
     */
    private hasValidTokenFee;
    /**
     * Processes the registration result and returns formatted output
     */
    private processRegistrationResult;
    /**
     * Ensures the agent has enough HBAR for operations
     */
    private ensureAgentHasFunds;
    /**
     * Validates that all required fields are present in the registration result
     */
    private validateRegistrationResult;
    /**
     * Creates a description of the fees configured for the agent
     */
    private createFeeDescription;
}
