/**
 * Ringback-Sound für ausgehende Voice-Calls.
 *
 * Warum nicht InCallManager.startRingback?
 *   - Auf iOS nutzt InCallManager System-Ringback, der je nach Locale/User-
 *     Setting unterschiedlich klingt (oft fällt es auf den User-Ringtone
 *     zurück → verwirrend, weil das wie ein eingehender Call klingt).
 *   - Wir wollen einen konsistenten "tüüüt-tüüüt"-Ton (EU-Festnetz-Standard
 *     425 Hz, 1s an / 4s aus, ITU-T E.180) auf BEIDEN Plattformen.
 *
 * Asset: `assets/sounds/ringback_eu.mp3` — selbst generiert mit ffmpeg,
 *        CC0 (Public Domain, kein Lizenz-Risiko).
 */
import { Audio, InterruptionModeAndroid, InterruptionModeIOS } from 'expo-av';

let sound: Audio.Sound | null = null;

export async function startRingback(): Promise<void> {
  try {
    // Audio-Mode aktiv setzen damit der Ton im Earpiece spielt
    // (NICHT laut über Speaker — wie bei echten Anrufen).
    await Audio.setAudioModeAsync({
      playsInSilentModeIOS: true,
      allowsRecordingIOS: false,
      interruptionModeIOS: InterruptionModeIOS.DoNotMix,
      interruptionModeAndroid: InterruptionModeAndroid.DoNotMix,
      shouldDuckAndroid: true,
      playThroughEarpieceAndroid: true,
      staysActiveInBackground: false,
    });

    if (sound) {
      try { await sound.unloadAsync(); } catch {}
      sound = null;
    }
    const { sound: s } = await Audio.Sound.createAsync(
      require('../assets/sounds/ringback_eu.mp3'),
      { shouldPlay: true, isLooping: true, volume: 1.0 },
    );
    sound = s;
  } catch (e: any) {
    // Best-effort — falls Sound-System hängt soll der Call trotzdem weiterlaufen.
    console.warn('[ringback] start failed', e?.message ?? e);
  }
}

export async function stopRingback(): Promise<void> {
  if (!sound) return;
  const s = sound;
  sound = null;
  try { await s.stopAsync(); } catch {}
  try { await s.unloadAsync(); } catch {}
}
