/**
 * Installs bundled plugin registration contract cases used across provider tests.
 */
import { describePluginRegistrationContract } from "./plugin-registration-contract.js";

type PluginRegistrationContractParams = Parameters<typeof describePluginRegistrationContract>[0];

export const pluginRegistrationContractCases = {
  alibaba: {
    pluginId: "alibaba",
    videoGenerationProviderIds: ["alibaba"],
    requireGenerateVideo: true,
  },
  anthropic: {
    pluginId: "anthropic",
    providerIds: ["anthropic"],
    mediaUnderstandingProviderIds: ["anthropic"],
    cliBackendIds: ["claude-cli"],
    requireDescribeImages: true,
  },
  brave: {
    pluginId: "brave",
    webSearchProviderIds: ["brave"],
  },
  byteplus: {
    pluginId: "byteplus",
    providerIds: ["byteplus", "byteplus-plan"],
    videoGenerationProviderIds: ["byteplus"],
    requireGenerateVideo: true,
  },
  comfy: {
    pluginId: "comfy",
    providerIds: ["comfy"],
    imageGenerationProviderIds: ["comfy"],
    musicGenerationProviderIds: ["comfy"],
    videoGenerationProviderIds: ["comfy"],
    requireGenerateImage: true,
    requireGenerateVideo: true,
  },
  deepgram: {
    pluginId: "deepgram",
    mediaUnderstandingProviderIds: ["deepgram"],
  },
  duckduckgo: {
    pluginId: "duckduckgo",
    webSearchProviderIds: ["duckduckgo"],
  },
  elevenlabs: {
    pluginId: "elevenlabs",
    speechProviderIds: ["elevenlabs"],
    requireSpeechVoices: true,
  },
  exa: {
    pluginId: "exa",
    webSearchProviderIds: ["exa"],
  },
  fal: {
    pluginId: "fal",
    providerIds: ["fal"],
    imageGenerationProviderIds: ["fal"],
    musicGenerationProviderIds: ["fal"],
    videoGenerationProviderIds: ["fal"],
    requireGenerateImage: true,
    requireGenerateVideo: true,
  },
  firecrawl: {
    pluginId: "firecrawl",
    webFetchProviderIds: ["firecrawl"],
    webSearchProviderIds: ["firecrawl"],
    toolNames: ["firecrawl_search", "firecrawl_scrape"],
  },
  google: {
    pluginId: "google",
    providerIds: ["google", "google-gemini-cli", "google-vertex"],
    webSearchProviderIds: ["gemini"],
    realtimeVoiceProviderIds: ["google"],
    speechProviderIds: ["google"],
    mediaUnderstandingProviderIds: ["google"],
    imageGenerationProviderIds: ["google"],
    videoGenerationProviderIds: ["google"],
    requireDescribeImages: true,
    requireGenerateImage: true,
    requireGenerateVideo: true,
  },
  gradium: {
    pluginId: "gradium",
    speechProviderIds: ["gradium"],
  },
  groq: {
    pluginId: "groq",
    mediaUnderstandingProviderIds: ["groq"],
  },
  lmstudio: {
    pluginId: "lmstudio",
    providerIds: ["lmstudio"],
  },
  microsoft: {
    pluginId: "microsoft",
    speechProviderIds: ["microsoft"],
    requireSpeechVoices: true,
  },
  minimax: {
    pluginId: "minimax",
    providerIds: ["minimax", "minimax-portal"],
    speechProviderIds: ["minimax"],
    mediaUnderstandingProviderIds: ["minimax", "minimax-portal"],
    imageGenerationProviderIds: ["minimax", "minimax-portal"],
    musicGenerationProviderIds: ["minimax", "minimax-portal"],
    videoGenerationProviderIds: ["minimax", "minimax-portal"],
    webSearchProviderIds: ["minimax"],
    requireDescribeImages: true,
    requireGenerateImage: true,
    requireGenerateVideo: true,
  },
  mistral: {
    pluginId: "mistral",
    mediaUnderstandingProviderIds: ["mistral"],
  },
  moonshot: {
    pluginId: "moonshot",
    providerIds: ["moonshot"],
    webSearchProviderIds: ["kimi"],
    mediaUnderstandingProviderIds: ["moonshot"],
    requireDescribeImages: true,
    manifestAuthChoice: {
      pluginId: "kimi",
      choiceId: "kimi-code-api-key",
      choiceLabel: "Kimi Code API key (subscription)",
      groupId: "moonshot",
      groupLabel: "Moonshot AI (Kimi K2.6)",
      groupHint: "Kimi K2.6",
    },
  },
  nvidia: {
    pluginId: "nvidia",
    providerIds: ["nvidia"],
    manifestAuthChoice: {
      pluginId: "nvidia",
      choiceId: "nvidia-api-key",
      choiceLabel: "NVIDIA API key",
      groupId: "nvidia",
      groupLabel: "NVIDIA",
      groupHint: "Direct API key",
    },
  },
  ollama: {
    pluginId: "ollama",
    providerIds: ["ollama", "ollama-cloud"],
    webSearchProviderIds: ["ollama"],
  },
  openai: {
    pluginId: "openai",
    providerIds: ["openai"],
    speechProviderIds: ["openai"],
    realtimeTranscriptionProviderIds: ["openai"],
    realtimeVoiceProviderIds: ["openai"],
    mediaUnderstandingProviderIds: ["openai"],
    imageGenerationProviderIds: ["openai"],
    videoGenerationProviderIds: ["openai"],
    requireSpeechVoices: true,
    requireDescribeImages: true,
    requireGenerateImage: true,
    requireGenerateVideo: true,
  },
  "opencode-go": {
    pluginId: "opencode-go",
    providerIds: ["opencode-go"],
    mediaUnderstandingProviderIds: ["opencode-go"],
    requireDescribeImages: true,
  },
  opencode: {
    pluginId: "opencode",
    providerIds: ["opencode"],
    mediaUnderstandingProviderIds: ["opencode"],
    requireDescribeImages: true,
  },
  openrouter: {
    pluginId: "openrouter",
    providerIds: ["openrouter"],
    mediaUnderstandingProviderIds: ["openrouter"],
    imageGenerationProviderIds: ["openrouter"],
    musicGenerationProviderIds: ["openrouter"],
    videoGenerationProviderIds: ["openrouter"],
    requireDescribeImages: true,
    requireGenerateImage: true,
    requireGenerateVideo: true,
  },
  parallel: {
    pluginId: "parallel",
    webSearchProviderIds: ["parallel", "parallel-free"],
  },
  perplexity: {
    pluginId: "perplexity",
    webSearchProviderIds: ["perplexity"],
  },
  pixverse: {
    pluginId: "pixverse",
    videoGenerationProviderIds: ["pixverse"],
    requireGenerateVideo: true,
  },
  qwen: {
    pluginId: "qwen",
    providerIds: [
      "qwen",
      "qwencloud",
      "modelstudio",
      "dashscope",
      "qwen-oauth",
      "qwen-portal",
      "qwen-cli",
    ],
    mediaUnderstandingProviderIds: ["qwen"],
    videoGenerationProviderIds: ["qwen"],
    requireDescribeImages: true,
    requireGenerateVideo: true,
  },
  runway: {
    pluginId: "runway",
    videoGenerationProviderIds: ["runway"],
    requireGenerateVideo: true,
  },
  senseaudio: {
    pluginId: "senseaudio",
    mediaUnderstandingProviderIds: ["senseaudio"],
  },
  tavily: {
    pluginId: "tavily",
    webSearchProviderIds: ["tavily"],
    toolNames: ["tavily_search", "tavily_extract"],
  },
  together: {
    pluginId: "together",
    providerIds: ["together"],
    videoGenerationProviderIds: ["together"],
    requireGenerateVideo: true,
  },
  "tts-local-cli": {
    pluginId: "tts-local-cli",
    speechProviderIds: ["tts-local-cli", "cli"],
  },
  vydra: {
    pluginId: "vydra",
    providerIds: ["vydra"],
    speechProviderIds: ["vydra"],
    imageGenerationProviderIds: ["vydra"],
    videoGenerationProviderIds: ["vydra"],
    requireSpeechVoices: true,
    requireGenerateImage: true,
    requireGenerateVideo: true,
    manifestAuthChoice: {
      pluginId: "vydra",
      choiceId: "vydra-api-key",
      choiceLabel: "Vydra API key",
      groupId: "vydra",
      groupLabel: "Vydra",
      groupHint: "Image, video, and speech",
    },
  },
  xai: {
    pluginId: "xai",
    providerIds: ["xai"],
    webSearchProviderIds: ["grok"],
    realtimeTranscriptionProviderIds: ["xai"],
    mediaUnderstandingProviderIds: ["xai"],
    videoGenerationProviderIds: ["xai"],
    toolNames: ["code_execution", "x_search"],
    requireGenerateVideo: true,
  },
  zai: {
    pluginId: "zai",
    mediaUnderstandingProviderIds: ["zai"],
    requireDescribeImages: true,
  },
} satisfies Record<string, PluginRegistrationContractParams>;
