#ifndef JTJAI_MEDIA_REPORTER_H
#define JTJAI_MEDIA_REPORTER_H

#include "config.h"
#include "rtsp_client.h"
#include "scheduler.h"
#include <vector>
#include <string>
#include <boost/json.hpp>

namespace jtjai_media {

class ResultReporter {
public:
    ResultReporter(const ConfigManager& config_mgr);
    
    // 生成完整报告
    bool generate_report(
        const std::vector<RTSPClientStats>& client_stats,
        const StreamScheduler::SchedulerStats& scheduler_stats
    );
    
    // 生成JSON格式报告
    std::string generate_json_report(
        const std::vector<RTSPClientStats>& client_stats,
        const StreamScheduler::SchedulerStats& scheduler_stats
    ) const;
    
    // 生成文本格式报告
    std::string generate_text_report(
        const std::vector<RTSPClientStats>& client_stats,
        const StreamScheduler::SchedulerStats& scheduler_stats
    ) const;
    
    // 生成CSV格式报告
    std::string generate_csv_report(
        const std::vector<RTSPClientStats>& client_stats
    ) const;
    
    // 保存报告到文件
    bool save_to_file(const std::string& content, const std::string& filename) const;
    
    // 打印控制台报告
    void print_console_report(
        const std::vector<RTSPClientStats>& client_stats,
        const StreamScheduler::SchedulerStats& scheduler_stats
    ) const;

private:
    ConfigManager config_mgr_;
    
    // 辅助方法
    std::string format_duration(const std::chrono::system_clock::time_point& start,
                               const std::chrono::system_clock::time_point& end) const;
    std::string format_bytes(int64_t bytes) const;
    std::string format_timestamp(const std::chrono::system_clock::time_point& time) const;
    std::string status_to_string(RTSPClientStatus status) const;
    
    // JSON转换方法
    boost::json::object client_stats_to_json(const RTSPClientStats& stats) const;
    boost::json::object scheduler_stats_to_json(const StreamScheduler::SchedulerStats& stats) const;
    boost::json::object config_to_json() const;
    
    // 统计计算方法
    struct SummaryStats {
        int total_streams;
        int successful_streams;
        int failed_streams;
        int cancelled_streams;
        int64_t total_bytes;
        int64_t total_frames;
        double success_rate;
        double average_duration;
        std::chrono::system_clock::time_point earliest_start;
        std::chrono::system_clock::time_point latest_end;
    };
    
    SummaryStats calculate_summary_stats(const std::vector<RTSPClientStats>& client_stats) const;
};

} // namespace jtjai_media

#endif // JTJAI_MEDIA_REPORTER_H