#ifndef JTJAI_MEDIA_CONFIG_H
#define JTJAI_MEDIA_CONFIG_H

#include <string>
#include <vector>
#include <boost/json.hpp>

namespace jtjai_media {

struct StreamConfig {
    std::string rtsp_url;         // RTSP流地址
    int duration_seconds;         // 访问时长（秒）
    double weight;                // 访问权重
    std::string output_filename;  // 输出文件名
    
    StreamConfig() = default;
    StreamConfig(const std::string& url, int duration, double w, const std::string& filename)
        : rtsp_url(url), duration_seconds(duration), weight(w), output_filename(filename) {}
};

struct GlobalConfig {
    int total_poll_duration_seconds;  // 总轮询时长（秒）
    int max_concurrent_streams;       // 最大并发流数
    std::string output_directory;     // 输出目录
    std::string report_filename;      // 报告文件名
    int connection_timeout_seconds;   // 连接超时时间
    int read_timeout_seconds;         // 读取超时时间
    int poll_cycles;                  // 轮询周期数（-1表示无限循环）
    int cycle_interval_seconds;       // 轮询周期间隔（秒）
    
    GlobalConfig() 
        : total_poll_duration_seconds(300)
        , max_concurrent_streams(10)
        , output_directory("./output")
        , report_filename("rtsp_report.json")
        , connection_timeout_seconds(10)
        , read_timeout_seconds(30)
        , poll_cycles(1)
        , cycle_interval_seconds(60) {}
};

class ConfigManager {
public:
    ConfigManager() = default;
    
    // 从JSON文件加载配置
    bool load_from_file(const std::string& config_file);
    
    // 从JSON字符串加载配置
    bool load_from_json(const std::string& json_str);
    
    // 保存配置到文件
    bool save_to_file(const std::string& config_file) const;
    
    // 获取配置
    const GlobalConfig& get_global_config() const { return global_config_; }
    const std::vector<StreamConfig>& get_stream_configs() const { return stream_configs_; }
    
    // 设置配置
    void set_global_config(const GlobalConfig& config) { global_config_ = config; }
    void add_stream_config(const StreamConfig& config) { stream_configs_.push_back(config); }
    void clear_stream_configs() { stream_configs_.clear(); }
    
    // 验证配置有效性
    bool validate() const;
    
    // 获取配置信息字符串
    std::string to_string() const;

private:
    GlobalConfig global_config_;
    std::vector<StreamConfig> stream_configs_;
    
    // JSON转换辅助函数
    boost::json::object stream_config_to_json(const StreamConfig& config) const;
    StreamConfig stream_config_from_json(const boost::json::object& json_obj) const;
    boost::json::object global_config_to_json(const GlobalConfig& config) const;
    GlobalConfig global_config_from_json(const boost::json::object& json_obj) const;
};

} // namespace jtjai_media

#endif // JTJAI_MEDIA_CONFIG_H