import type { WidgetConfigResponse } from "./public-contracts.js";

import type { AccessibilityCapabilities } from "./accessibility/types.js";

export type AccessibilityFlags = WidgetConfigResponse["accessibility"];

/**
 * Imports each voice adapter independently from the CDN base bundle. A browser
 * without the matching Web Speech API receives an empty capability instead of
 * a blocking initialization error.
 */
export async function loadAccessibilityCapabilities(
  flags: AccessibilityFlags,
): Promise<AccessibilityCapabilities> {
  const capabilities: AccessibilityCapabilities = {};
  const imports: Promise<void>[] = [];

  // Keep these as separate import() calls: build.mjs externalizes each target
  // into its own versioned file instead of embedding it in the IIFE.
  if (flags.stt) {
    imports.push(
      import("./accessibility/speech-to-text.js").then((module) => {
        const speechToText = module.createSpeechToText();
        if (speechToText.isSupported) capabilities.speechToText = speechToText;
      }),
    );
  }
  if (flags.tts) {
    imports.push(
      import("./accessibility/text-to-speech.js").then((module) => {
        const textToSpeech = module.createTextToSpeech();
        if (textToSpeech.isSupported) capabilities.textToSpeech = textToSpeech;
      }),
    );
  }

  await Promise.all(imports);
  return capabilities;
}
