#include "audio_sink.h"
#include "webrtcpush_log.h"

/* USB声卡排队锁: audio_sink 和本地音频串行访问 plughw:2,0 */
static GMutex g_alsa_device_lock;

static AudioSink *g_audio_sink_singleton = NULL;

/*
 * 手机→设备方向的音频不再走 RTP：手机端 audio 为 recvonly（只收不发），
 * 手机→设备的音频通过 DataChannel 发送 MP4，由 decodebin 播放。
 * 因此本模块不再创建 GStreamer 接收管道，仅保留 USB 声卡全局锁，
 * 供 DataChannel 播放线程与本地提示音串行访问 ALSA 设备使用。
 */

struct AudioSink {
  GMutex lock;
};

void audio_sink_lock_alsa(void) { g_mutex_lock(&g_alsa_device_lock); }
void audio_sink_unlock_alsa(void) { g_mutex_unlock(&g_alsa_device_lock); }

void audio_sink_interrupt(AudioSink *src)
{
  (void)src;
  /* RTP 接收管道已移除，无会话需要中断；DataChannel 播放通过 lock/unlock 串行访问 ALSA。 */
}

AudioSink *audio_sink_start(const char *alsa_device, char **error_message)
{
  AudioSink *src;
  (void)alsa_device;
  if (error_message)
    *error_message = NULL;
  src = g_new0(AudioSink, 1);
  g_mutex_init(&src->lock);
  g_audio_sink_singleton = src;
  my_zlog_info("audio_sink: started (RTP receive removed, ALSA lock only)");
  return src;
}

void audio_sink_stop(AudioSink *src)
{
  if (!src)
    return;
  if (g_audio_sink_singleton == src)
    g_audio_sink_singleton = NULL;
  g_mutex_clear(&src->lock);
  g_free(src);
}

void audio_sink_set_volume(AudioSink *src, double volume)
{
  (void)src;
  (void)volume;
  /* 无 GStreamer 管道，音量设置为空操作（保留接口供 volume_control 调用）。 */
}
