import type { ZodType, ZodTypeDef } from "zod";
import type { Tool, Schema } from "ai";
import type { AIProviderName, AnalyticsData, EvaluationData } from "../core/types.js";
/**
 * Generate function options interface - Primary method for content generation
 * Future-ready for multi-modal capabilities while maintaining text focus
 */
export interface GenerateOptions {
    input: {
        text: string;
    };
    output?: {
        format?: "text" | "structured" | "json";
    };
    provider?: AIProviderName | string;
    model?: string;
    temperature?: number;
    maxTokens?: number;
    systemPrompt?: string;
    schema?: ZodType<unknown, ZodTypeDef, unknown> | Schema<unknown>;
    tools?: Record<string, Tool>;
    timeout?: number | string;
    disableTools?: boolean;
    enableEvaluation?: boolean;
    enableAnalytics?: boolean;
    context?: Record<string, unknown>;
    evaluationDomain?: string;
    toolUsageContext?: string;
    conversationHistory?: Array<{
        role: string;
        content: string;
    }>;
}
/**
 * Generate function result interface - Primary output format
 * Future-ready for multi-modal outputs while maintaining text focus
 */
export interface GenerateResult {
    content: string;
    outputs?: {
        text: string;
    };
    provider?: string;
    model?: string;
    usage?: {
        inputTokens: number;
        outputTokens: number;
        totalTokens: number;
    };
    responseTime?: number;
    toolCalls?: Array<{
        toolCallId: string;
        toolName: string;
        args: Record<string, unknown>;
    }>;
    toolResults?: unknown[];
    toolsUsed?: string[];
    toolExecutions?: Array<{
        name: string;
        input: Record<string, unknown>;
        output: unknown;
        duration: number;
    }>;
    enhancedWithTools?: boolean;
    availableTools?: Array<{
        name: string;
        description: string;
        parameters: Record<string, unknown>;
    }>;
    analytics?: AnalyticsData;
    evaluation?: EvaluationData;
}
/**
 * Enhanced provider interface with generate method
 */
export interface EnhancedProvider {
    generate(options: GenerateOptions): Promise<GenerateResult>;
    getName(): string;
    isAvailable(): Promise<boolean>;
}
