/**
 * @file hal_audio_recorder.h
 * @brief 麦克风采集 HAL 接口
 */

#ifndef HAL_AUDIO_RECORDER_H
#define HAL_AUDIO_RECORDER_H

#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

/** 录音器句柄 */
typedef void *hal_recorder_handle_t;

/**
 * @brief PCM 数据回调
 * @param pcm_data PCM 数据
 * @param len      数据字节数
 * @param user_ctx 用户上下文
 */
typedef void (*hal_recorder_data_cb_t)(const void *pcm_data, size_t len, void *user_ctx);

/** 录音器配置 */
typedef struct {
    uint32_t              sample_rate;      /* 采样率（Hz），如 16000 */
    uint8_t               channels;         /* 声道数 */
    uint8_t               bits_per_sample;  /* 采样位宽 */
    uint16_t              frame_ms;         /* 帧长（毫秒），如 20 */
    bool                  aec_enable;       /* 是否启用回声消除 */
    hal_recorder_data_cb_t on_data;         /* 数据回调 */
    void                  *user_ctx;        /* 回调用户上下文 */
} hal_recorder_config_t;

/**
 * @brief 创建录音器
 * @return 句柄，失败返回 NULL
 */
hal_recorder_handle_t hal_recorder_create(const hal_recorder_config_t *config);

/** @brief 启动采集，PCM 通过回调上送 */
int hal_recorder_start(hal_recorder_handle_t handle);

/** @brief 停止采集 */
int hal_recorder_stop(hal_recorder_handle_t handle);

/** @brief 销毁录音器 */
void hal_recorder_destroy(hal_recorder_handle_t handle);

#ifdef __cplusplus
}
#endif

#endif /* HAL_AUDIO_RECORDER_H */
