// wakewords/audioRoutingConfig.ts
export type PreferredAudioInput =
  | 'bluetoothHighQualityMic'
  | 'builtInMic'
  | 'none';

export type RouteConfigEntry = {
  category: 'playAndRecord' | 'record' | 'soloAmbient' | 'ambient' | 'playback';
  mode: 'default' | 'measurement' | 'voiceChat' | 'videoRecording' | 'gameChat';
  options: (
    | 'mixWithOthers'
    | 'duckOthers'
    | 'allowBluetooth'
    | 'allowBluetoothHFP'
    | 'allowBluetoothA2DP'
    | 'bluetoothHighQualityRecording'
    | 'allowAirPlay'
    | 'defaultToSpeaker'
    | 'overrideMutedMicrophoneInterruption'
  )[];
  /** First input policy to try. HD Bluetooth requires iOS 26, mode=default, and bluetoothHighQualityRecording. */
  preferredInput: PreferredAudioInput;
  /**
   * Forced fallback after an HD Bluetooth request fails. builtInMic switches
   * to phone-mic + A2DP; none switches to ordinary headset HFP.
   */
  forceFallback?: PreferredAudioInput;
  /** Lowercase JSON alias for forceFallback. Prefer forceFallback in TypeScript. */
  forcefallback?: PreferredAudioInput;
  /** Backward-compatible alias for forceFallback. */
  preferredInputFallback?: PreferredAudioInput;
  /** Additional forced fallback after forceFallback. */
  forceFallback1?: PreferredAudioInput;
  /** Lowercase JSON alias for forceFallback1. */
  forcefallback1?: PreferredAudioInput;
  /** Backward-compatible alias for forceFallback1. */
  preferredInputFallback1?: PreferredAudioInput;
  /** Final forced fallback. */
  forceFallback2?: PreferredAudioInput;
  /** Lowercase JSON alias for forceFallback2. */
  forcefallback2?: PreferredAudioInput;
  /** Backward-compatible alias for forceFallback2. */
  preferredInputFallback2?: PreferredAudioInput;
};

export type AudioRoutingConfig = {
  /** Wake-word-only AEC preferences for regular capture and physical TTS playback. */
  WakewordAEC?: {
    regular: boolean;
    duringTTS: boolean;
  };
  default: RouteConfigEntry;
  byOutputPort: {
    carAudio?: RouteConfigEntry;        // .carAudio (CarPlay)
    builtInReceiver?: RouteConfigEntry; // .builtInReceiver (earpiece)
    builtInSpeaker?: RouteConfigEntry;  // .builtInSpeaker
    bluetoothA2DP?: RouteConfigEntry;   // .bluetoothA2DP
    bluetoothHFP?: RouteConfigEntry;    // .bluetoothHFP
    headphones?: RouteConfigEntry;      // .headphones
    // add more as needed
  };
  /** Temporary wake-word sensitivity used only while physical TTS audio plays. */
  wakeWordDuringTTS?: {
    threshold: number;
    buffer_cnt: number;
  };
};
