#ifndef ACOUSTIC_ANALYZER_ROS_THREAT_PUBLISHER_H_
#define ACOUSTIC_ANALYZER_ROS_THREAT_PUBLISHER_H_

#include <memory>
#include <string>

#include <ros/ros.h>

#include "acoustic_analyzer/core/types.h"

namespace acoustic {

/**
 * @brief 威胁结果 ROS 发布器
 *
 * 将 AcousticFrame 转换为 AcousticThreatArray 消息并发布到指定 topic。
 */
class ThreatPublisher {
   public:
    /**
     * @brief 构造发布器
     * @param nh    ROS 节点句柄
     * @param topic 发布 topic 名称（默认 /acoustic/threats）
     */
    ThreatPublisher(ros::NodeHandle& nh,
                    const std::string& topic = "/acoustic/threats");

    ~ThreatPublisher() = default;

    // 禁止拷贝，允许移动
    ThreatPublisher(const ThreatPublisher&) = delete;
    ThreatPublisher& operator=(const ThreatPublisher&) = delete;
    ThreatPublisher(ThreatPublisher&&) = default;
    ThreatPublisher& operator=(ThreatPublisher&&) = default;

    /**
     * @brief 发布一帧声学分析结果
     * @param frame 包含威胁列表或 is_clear 的帧数据
     */
    void Publish(const AcousticFrame& frame);

    /**
     * @brief 获取已发布的消息总数
     */
    std::size_t NumPublished() const noexcept;

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

}  // namespace acoustic

#endif  // ACOUSTIC_ANALYZER_ROS_THREAT_PUBLISHER_H_
