#ifndef ACOUSTIC_ANALYZER_IO_MOBILE_PHONE_SOURCE_H_
#define ACOUSTIC_ANALYZER_IO_MOBILE_PHONE_SOURCE_H_

#include <cstddef>
#include <memory>
#include <string>
#include <vector>

#include "acoustic_analyzer/io/audio_source.h"

// 前置声明 ROS 类型，避免强制依赖 ros.h
namespace ros {
class NodeHandle;
}

namespace acoustic {

/**
 * @brief 手机麦克风 UDP/RosTopic 音频源
 *
 * 通过 ROS Topic 接收手机端通过 UDP 转发过来的单通道音频流。
 * 内部使用环形缓冲区缓存数据，支持阻塞读取。
 */
class MobilePhoneSource : public AudioSource {
   public:
    /**
     * @brief 构造手机音频源
     * @param nh           ROS 节点句柄
     * @param topic        订阅的音频 topic 名称
     * @param timeout_sec  等待首包连接超时 (秒)
     * @param sample_rate  期望采样率 (Hz)
     */
    MobilePhoneSource(ros::NodeHandle& nh,
                      const std::string& topic,
                      float timeout_sec,
                      int sample_rate = 16000);

    ~MobilePhoneSource() override;

    bool Open() override;
    std::vector<float> Read(std::size_t num_samples) override;
    void Close() override;
    std::size_t NumChannels() const override;
    int SampleRate() const override;
    bool IsOpen() const override;

   private:
    class Impl;
    std::unique_ptr<Impl> impl_;
};

}  // namespace acoustic

#endif  // ACOUSTIC_ANALYZER_IO_MOBILE_PHONE_SOURCE_H_
