/**
 * @file SystemLogPanel.h
 * @brief 系统日志面板界面组件头文件
 * @author Qt UI Developer Expert
 * @date 2024-12-21
 * @version 1.0
 */

#ifndef SYSTEM_LOG_PANEL_H
#define SYSTEM_LOG_PANEL_H

#include <QWidget>
#include <QTextEdit>
#include <QPushButton>
#include <QComboBox>
#include <QLabel>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QTimer>
#include <QDateTime>
#include <QScrollBar>

// 前向声明
class SystemLogger;

/**
 * @class SystemLogPanel
 * @brief 系统日志显示面板组件
 * 
 * 系统日志面板是BattlefieldExplorationSystem中的核心UI组件，
 * 用于实时显示系统操作日志、设备状态变化、错误信息等关键信息。
 * 
 * 主要功能：
 * - 多级别日志显示（Debug, Info, Warning, Error, Success）
 * - 实时日志更新和格式化显示
 * - 日志过滤和搜索功能
 * - 日志清空、暂停/恢复控制
 * - 军用风格的界面设计
 */
class SystemLogPanel : public QWidget
{
    Q_OBJECT

public:
    /**
     * @brief 构造函数
     * @param parent 父控件指针
     */
    explicit SystemLogPanel(QWidget *parent = nullptr);

    /**
     * @brief 析构函数
     */
    ~SystemLogPanel();

    /**
     * @brief 日志级别枚举（与SystemLogger保持一致）
     */
    enum LogLevel {
        Debug = 0,    ///< 调试信息
        Info = 1,     ///< 一般信息
        Warning = 2,  ///< 警告信息
        Error = 3,    ///< 错误信息
        Success = 4   ///< 成功信息
    };

public slots:
    /**
     * @brief 添加日志条目
     * @param level 日志级别
     * @param message 日志消息内容
     */
    void addLog(LogLevel level, const QString &message);

    /**
     * @brief 清空所有日志
     */
    void clearLogs();

    /**
     * @brief 暂停日志更新
     */
    void pauseLogging();

    /**
     * @brief 恢复日志更新
     */
    void resumeLogging();

    /**
     * @brief 设置日志级别过滤
     * @param minLevel 最小显示级别
     */
    void setLogLevelFilter(LogLevel minLevel);

private slots:
    /**
     * @brief 处理清空按钮点击
     */
    void onClearButtonClicked();

    /**
     * @brief 处理暂停/恢复按钮点击
     */
    void onPauseButtonClicked();

    /**
     * @brief 处理级别过滤器变化
     * @param index 选中的过滤级别索引
     */
    void onLevelFilterChanged(int index);

    /**
     * @brief 更新状态信息显示
     */
    void updateStatusInfo();

private:
    /**
     * @brief 初始化UI界面
     */
    void setupUI();

    /**
     * @brief 设置界面样式
     */
    void setupStyle();

    /**
     * @brief 连接信号和槽
     */
    void connectSignals();

    /**
     * @brief 格式化日志条目
     * @param level 日志级别
     * @param message 消息内容
     * @return 格式化后的HTML字符串
     */
    QString formatLogEntry(LogLevel level, const QString &message);

    /**
     * @brief 获取级别图标
     * @param level 日志级别
     * @return 对应的图标字符串
     */
    QString getLevelIcon(LogLevel level);

    /**
     * @brief 获取级别颜色
     * @param level 日志级别
     * @return 对应的颜色字符串
     */
    QString getLevelColor(LogLevel level);

    /**
     * @brief 获取级别名称
     * @param level 日志级别
     * @return 对应的级别名称
     */
    QString getLevelName(LogLevel level);

    /**
     * @brief 限制日志行数，防止内存占用过高
     */
    void limitLogLines();

    /**
     * @brief 自动滚动到底部
     */
    void scrollToBottom();

private:
    // UI组件
    QTextEdit *m_logTextEdit;           ///< 日志显示文本框
    QPushButton *m_clearButton;         ///< 清空按钮
    QPushButton *m_pauseButton;         ///< 暂停/恢复按钮
    QComboBox *m_levelFilter;           ///< 级别过滤下拉框
    QLabel *m_statusLabel;              ///< 状态信息标签
    QLabel *m_titleLabel;               ///< 标题标签

    // 布局管理
    QVBoxLayout *m_mainLayout;          ///< 主布局
    QHBoxLayout *m_controlLayout;       ///< 控制按钮布局
    QHBoxLayout *m_statusLayout;        ///< 状态信息布局

    // 状态变量
    bool m_isPaused;                    ///< 是否暂停日志更新
    LogLevel m_minLevel;                ///< 最小显示级别
    int m_logCounts[5];                 ///< 各级别日志计数
    int m_totalLogCount;                ///< 总日志数量
    int m_maxLogLines;                  ///< 最大日志行数限制

    // 定时器
    QTimer *m_statusUpdateTimer;        ///< 状态更新定时器

    // 样式常量
    static const int MAX_LOG_LINES;     ///< 最大日志行数
    static const int STATUS_UPDATE_INTERVAL; ///< 状态更新间隔(ms)
};

#endif // SYSTEM_LOG_PANEL_H