import * as React from 'react';
/**
 * RPC Invocation data received from LiveKit
 */
export interface RpcInvocationData {
    callerIdentity: string;
    payload: string;
    requestId?: string;
    responseTimeout?: number;
}
/**
 * Presentation modes for interactive components
 */
export type ViewPresentationMode = 'embedded' | 'modal' | 'fullscreen';
/**
 * Handler for interactive component responses
 */
export interface VoxketInteractiveUIHandler {
    /**
     * Called when user interaction is successful
     * @param data Response data from user interaction
     * @param successView Optional React component to show on success
     */
    didSuccess(data: Record<string, any>, successView?: React.ReactElement): void;
    /**
     * Called when user interaction fails or times out
     * @param error Error data
     */
    didFail(error: Record<string, any>): void;
    /**
     * Dismiss the current view and send decline response to agent
     * This notifies the agent that the user dismissed/declined the interaction
     * and sends a structured response indicating the dismissal
     */
    dismissView(): void;
    /**
     * Called when user interaction times out
     * @param timeoutView Optional React component to show on timeout
     */
    didTimeout?(timeoutView?: React.ReactElement): void;
}
/**
 * Props passed to interactive components
 */
export interface VoxketInteractiveViewProps {
    /**
     * Handler for component responses
     */
    handler?: VoxketInteractiveUIHandler;
    /**
     * Load data into the component
     * @param data JSON data from the agent
     */
    loadData?(data: any): Promise<void>;
    /**
     * Timeout for user interaction (in seconds)
     */
    timeout?: number;
    /**
     * Presentation mode
     */
    presentationMode?: ViewPresentationMode;
    /**
     * Data passed to the component from the RPC call
     */
    data?: any;
    /**
     * VoxketClient instance for sending messages and interacting with the session
     */
    client?: any;
    /**
     * Function to add a local message to the chat without sending to agent
     */
    addLocalMessage?: (content: string) => void;
}
/**
 * Interface that interactive components must implement
 */
export type VoxketInteractiveView = React.ComponentType<VoxketInteractiveViewProps>;
/**
 * RPC Method registration
 */
export interface RpcMethodRegistration {
    methodName: string;
    component: VoxketInteractiveView;
    presentationMode: ViewPresentationMode;
    timeout?: number;
}
/**
 * RPC Response data
 */
export interface RpcResponseData {
    success: boolean;
    data?: Record<string, any>;
    message?: string;
    error?: Record<string, any>;
    timestamp: Date;
}
/**
 * RPC Method handler function
 */
export type RpcMethodHandler = (data: RpcInvocationData) => Promise<string>;
/**
 * Interactive UI state
 */
export interface InteractiveUIState {
    isVisible: boolean;
    methodName: string;
    component: VoxketInteractiveView | null;
    presentationMode: ViewPresentationMode;
    timeout: number;
    data: any;
    handler: VoxketInteractiveUIHandler | null;
}
/**
 * Events related to RPC interactions
 */
export interface RpcEvents {
    'rpc.method.registered': (data: {
        methodName: string;
    }) => void;
    'rpc.method.called': (data: {
        methodName: string;
        data: RpcInvocationData;
    }) => void;
    'rpc.interaction.started': (data: {
        methodName: string;
        presentationMode: ViewPresentationMode;
    }) => void;
    'rpc.interaction.completed': (data: {
        methodName: string;
        response: RpcResponseData;
    }) => void;
    'rpc.interaction.timeout': (data: {
        methodName: string;
        response: RpcResponseData;
    }) => void;
    'rpc.interaction.dismissed': (data: {
        methodName: string;
        response: RpcResponseData;
    }) => void;
    [key: string]: (...args: any[]) => void;
}
