/**
 * @file audio_manager.h
 * @brief 音频管线管理（录音 + 播放）
 */

#ifndef CORE_AUDIO_MANAGER_H
#define CORE_AUDIO_MANAGER_H

#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include "aiagent_types.h"
#include "aiagent_config.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef struct engine_internal_ctx engine_internal_ctx_t;
typedef struct audio_mgr_ctx      audio_mgr_ctx_t;

/** 录音数据回调 */
typedef void (*audio_mgr_record_cb_t)(const void *pcm_data, size_t len, void *user_ctx);

/** 音频管理器配置 */
typedef struct {
    int sample_rate;                /* 采样率（Hz）*/
    int channels;                   /* 声道数 */
    int frame_ms;                   /* 帧长（毫秒）*/
    int record_buf_size;            /* 录音缓冲区大小（字节）*/
    int playback_buf_size;          /* 播放缓冲区大小（字节）*/
    audio_mgr_record_cb_t on_data;  /* 录音数据回调 */
    void *user_ctx;                 /* 回调上下文 */
} audio_mgr_config_t;

/** @brief 初始化音频管理器 */
int audio_mgr_init(engine_internal_ctx_t *ctx, const audio_mgr_config_t *config);

/** @brief 启动录音 */
int audio_mgr_start_record(engine_internal_ctx_t *ctx);

/** @brief 停止录音 */
int audio_mgr_stop_record(engine_internal_ctx_t *ctx);

/** @brief 启动播放 */
int audio_mgr_start_playback(engine_internal_ctx_t *ctx);

/** @brief 写入 PCM 播放数据 */
int audio_mgr_write_playback_data(engine_internal_ctx_t *ctx, const void *data, size_t len);

/** @brief 停止播放 */
int audio_mgr_stop_playback(engine_internal_ctx_t *ctx);

/** @brief 播放本地音频文件（提示音等）*/
int audio_mgr_play_local(engine_internal_ctx_t *ctx, const char *file_path);

/** @brief 设置播放音量（0-100）*/
int audio_mgr_set_volume(engine_internal_ctx_t *ctx, int volume);

/** @brief 启用/禁用回声消除 */
int audio_mgr_set_aec(engine_internal_ctx_t *ctx, bool enable);

/** @brief 设置播放静音标志 */
void audio_mgr_set_silence(engine_internal_ctx_t *ctx, bool silence);

/** @brief 反初始化音频管理器 */
void audio_mgr_deinit(engine_internal_ctx_t *ctx);

/** @brief 清空上行发送缓冲区 */
void audio_mgr_clear_send_cbuf(engine_internal_ctx_t *ctx);

/** @brief TTS 开始前向 cbuf 注入静音 */
void audio_mgr_prefill_silence(engine_internal_ctx_t *ctx);

#ifdef __cplusplus
}
#endif

#endif /* CORE_AUDIO_MANAGER_H */
