export interface TagSuggestion {
  tag: string;
  confidence: number;
}

export interface TitleSuggestion {
  title: string;
  confidence: number;
}

export interface ToolUseOptions {
  tools: Record<string, any>  // AI SDK tool() objects
  maxSteps?: number
  systemPrompt?: string
  messages?: any[]
  prompt?: string
}

export interface ToolCallResult {
  toolCalls: Array<{ toolName: string; input: any }>
  toolResults: Array<{ toolName: string; input: any; output: any }>
  text: string
  steps: Array<{
    text: string
    toolCalls: Array<{ toolName: string; input: any }>
    toolResults: Array<{ toolName: string; input: any; output: any }>
  }>
}

export interface AIProvider {
  /**
   * Analyse le contenu et suggère des tags pertinents.
   */
  generateTags(content: string, language?: string): Promise<TagSuggestion[]>;

  /**
   * Génère un vecteur d'embeddings pour la recherche sémantique.
   */
  getEmbeddings(text: string): Promise<number[]>;

  /**
   * Génère des suggestions de titres basées sur le contenu.
   */
  generateTitles(prompt: string): Promise<TitleSuggestion[]>;

  /**
   * Génère du texte basé sur un prompt.
   */
  generateText(prompt: string): Promise<string>;

  /**
   * Fournit une réponse de chat (utilisé pour le système agentique)
   */
  chat(messages: any[], systemPrompt?: string): Promise<any>;

  /**
   * Retourne le modèle AI SDK pour le streaming direct (utilisé par l'API route)
   */
  getModel(): any;

  /**
   * Generate text with tool-use support (multi-step agent loop)
   */
  generateWithTools(options: ToolUseOptions): Promise<ToolCallResult>;
}

export type AIProviderType = 'openai' | 'ollama';

export interface AIConfig {
  provider: AIProviderType;
  apiKey?: string;
  baseUrl?: string; // Utile pour Ollama
  model?: string;
  embeddingModel?: string;
}
