/**
 * @file DataLogger.h
 * @brief SkyLink Qt 地面站 - 数据记录工具
 * 
 * 负责保存接收到的图像和相关的 GPS/统计数据。
 * 
 * @author flowzl
 * @date 2026-01-19
 */

#pragma once

#include <QString>
#include <QImage>
#include <QFile>
#include <QTextStream>
#include <memory>
#include <cstdint>
#include <vector>

/**
 * @class DataLogger
 * @brief 数据记录类
 */
class DataLogger {
public:
    /**
     * @brief 构造函数
     * @param data_dir 数据保存目录
     */
    explicit DataLogger(const QString& data_dir = "./skylink_data");
    
    /**
     * @brief 析构函数
     */
    ~DataLogger();
    
    /**
     * @brief 保存一帧图像
     * @param image 图像数据
     * @param lat 纬度
     * @param lon 经度
     * @param alt 海拔
     * @return 成功返回 true
     */
    bool save_frame(const QImage& image, double lat, double lon, double alt);
    
    /**
     * @brief 开始一个录制会话
     * @return 会话 ID
     */
    QString start_session();
    
    /**
     * @brief 结束当前会话
     */
    void end_session();
    
    /**
     * @brief 保存统计信息
     * @param fps 帧率
     * @param kbs 比特率
     * @param packet_loss 丢包率
     */
    void save_stats(int fps, int kbs, double packet_loss);

private:
    QString data_dir_;          ///< 数据保存目录
    QString current_session_;   ///< 当前会话 ID
    std::unique_ptr<QFile> log_file_;  ///< CSV 日志文件
    std::unique_ptr<QTextStream> log_stream_;
    uint32_t frame_counter_;    ///< 帧计数器
    
    /**
     * @brief 确保目录存在
     */
    bool ensure_directory();
    
    /**
     * @brief 创建 CSV 日志文件
     */
    bool create_log_file();
};
