export type AIProviderName = "openai" | "anthropic";

export interface AIProviderConfig {
  provider: AIProviderName;
  model: string;
  timeoutMs: number;
  apiKey: string;
}

export interface TextGenerationRequest {
  systemPrompt: string;
  userPrompt: string;
}

export interface TextGenerationResult {
  content: string;
  provider: AIProviderName;
  model: string;
  inputTokens?: number;
  outputTokens?: number;
  totalTokens?: number;
}

export interface ImageGenerationResult {
  imageUrl: string | null;
  imagePrompt: string;
  provider: "openai" | "gemini" | "placeholder";
  /** e.g. "gemini✗ → openai✓" */
  providerChain?: string;
  warning?: string | null;
  imageModel?: string;
  estimatedCostUsd?: number;
  /** True when Gemini/OpenAI hero was composited into the branded 1080 SVG checklist. */
  brandTemplateComposed?: boolean;
  /** Absolute path to Gemini/OpenAI hero PNG for FFmpeg overlay after SVG rasterize. */
  heroImageFilePath?: string | null;
}

export interface AIProvider {
  name: AIProviderName;
  model: string;
  generateText(request: TextGenerationRequest): Promise<TextGenerationResult>;
}
