/**
 * @file RightFunctionPanel.h
 * @brief 右侧功能面板组件定义
 * @author BattlefieldExplorationSystem Team
 * @date 2024-01-15
 * @version 1.0
 * 
 * 右侧功能面板，提供战场探索系统的核心功能控制，包括：
 * - 战场探索模块（机器狗和无人机控制）
 * - 情报传输模块（语音通话功能）
 * - 敌情统计模块（敌情可视化和AI分析）
 * 
 * @note 依赖Qt GUI模块
 * @since 1.0
 */

#ifndef RIGHTFUNCTIONPANEL_H
#define RIGHTFUNCTIONPANEL_H

#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QGroupBox>
#include <QLabel>
#include <QPushButton>
#include <QFrame>
#include <QProgressBar>
#include <QSlider>

/**
 * @class ModuleCard
 * @brief 功能模块卡片组件
 * 
 * 用于显示单个功能模块的卡片容器，包含标题和内容区域
 */
class ModuleCard : public QFrame
{
    Q_OBJECT
    
public:
    /**
     * @brief 构造函数
     * @param title 模块标题
     * @param icon 模块图标（Unicode字符或图片路径）
     * @param parent 父组件指针
     */
    explicit ModuleCard(const QString &title, const QString &icon, QWidget *parent = nullptr);
    
    /**
     * @brief 添加内容到模块卡片
     * @param content 要添加的内容组件
     */
    void addContent(QWidget *content);
    
private:
    QVBoxLayout *m_contentLayout;     ///< 内容区域布局
    QLabel *m_titleLabel;             ///< 标题标签
};

/**
 * @class RightDeviceCard
 * @brief 右侧面板设备卡片组件
 * 
 * 用于显示单个设备的信息卡片，支持点击选择和状态显示
 */
class RightDeviceCard : public QFrame
{
    Q_OBJECT
    
public:
    /**
     * @brief 构造函数
     * @param name 设备名称
     * @param iconPath 设备图标路径
     * @param parent 父组件指针
     */
    explicit RightDeviceCard(const QString &name, const QString &iconPath, QWidget *parent = nullptr);
    
    /**
     * @brief 设置设备状态
     * @param status 状态文本
     * @param color 状态颜色
     */
    void setStatus(const QString &status, const QColor &color);
    
    /**
     * @brief 设置设备选中状态
     * @param active 是否选中
     */
    void setActive(bool active);
    
signals:
    /**
     * @brief 设备被选中信号
     * @param deviceName 设备名称
     */
    void deviceSelected(const QString &deviceName);
    
protected:
    /**
     * @brief 鼠标点击事件
     * @param event 鼠标事件
     */
    void mousePressEvent(QMouseEvent *event) override;
    
    /**
     * @brief 绘制事件（绘制选中边框）
     * @param event 绘制事件
     */
    void paintEvent(QPaintEvent *event) override;
    
private:
    QString m_deviceName;             ///< 设备名称
    QLabel *m_iconLabel;              ///< 图标标签
    QLabel *m_nameLabel;              ///< 名称标签
    QLabel *m_statusLabel;            ///< 状态标签
    bool m_isActive = false;          ///< 是否选中状态
};

/**
 * @class RightFunctionPanel
 * @brief 右侧功能面板主组件
 * 
 * 包含战场探索、情报传输、敌情统计三大功能模块的主面板
 */
class RightFunctionPanel : public QWidget
{
    Q_OBJECT
    
public:
    /**
     * @brief 构造函数
     * @param parent 父组件指针
     */
    explicit RightFunctionPanel(QWidget *parent = nullptr);
    
signals:
    // 战场探索模块信号
    /**
     * @brief 开始自主建图信号
     */
    void startMapping();
    
    /**
     * @brief 停止自主建图信号
     */
    void stopMapping();
    
    /**
     * @brief 开始导航避障信号
     */
    void startNavigation();
    
    /**
     * @brief 停止导航避障信号
     */
    void stopNavigation();
    
    /**
     * @brief 开始照片传输信号
     */
    void startPhotoTransmission();
    
    /**
     * @brief 停止照片传输信号
     */
    void stopPhotoTransmission();
    
    /**
     * @brief 开始人物识别信号
     */
    void startPersonRecognition();
    
    /**
     * @brief 停止人物识别信号
     */
    void stopPersonRecognition();
    
    // 情报传输模块信号
    /**
     * @brief 打开情报传达界面信号
     */
    void openIntelligenceUI();
    
    // 敌情统计模块信号
    /**
     * @brief 刷新敌情统计信号
     */
    void refreshEnemyStats();
    
    /**
     * @brief 导出报告信号
     */
    void exportReport();
    
    /**
     * @brief 请求AI分析信号
     */
    void requestAIAnalysis();
    
public slots:
    /**
     * @brief 更新敌情统计信息
     * @param totalEnemies 敌人总数
     * @param threatLevel 威胁等级
     */
    void updateEnemyStats(int totalEnemies, const QString &threatLevel);
    
    /**
     * @brief 更新设备状态
     * @param deviceName 设备名称
     * @param online 是否在线
     * @param battery 电池电量
     */
    void updateDeviceStatus(const QString &deviceName, bool online, int battery);
    
private slots:
    /**
     * @brief 设备选择槽函数
     * @param deviceName 设备名称
     */
    void onDeviceSelected(const QString &deviceName);
    
    /**
     * @brief 自主建图开关槽函数
     */
    void onMappingToggle();
    
    /**
     * @brief 导航避障开关槽函数
     */
    void onNavigationToggle();
    
    /**
     * @brief 照片传输开关槽函数
     */
    void onPhotoTransmissionToggle();
    
    /**
     * @brief 人物识别开关槽函数
     */
    void onPersonRecognitionToggle();
    
    /**
     * @brief 打开情报传达界面槽函数
     */
    void onOpenIntelligenceUI();
    
    /**
     * @brief 刷新统计槽函数
     */
    void onRefreshStats();
    
    /**
     * @brief AI分析槽函数
     */
    void onAIAnalysis();
    
private:
    /**
     * @brief 设置UI界面
     */
    void setupUI();
    
    /**
     * @brief 设置战场探索模块
     */
    void setupBattlefieldExplorationModule();
    
    /**
     * @brief 设置情报传输模块
     */
    void setupIntelligenceModule();
    
    /**
     * @brief 设置敌情统计模块
     */
    void setupEnemyStatsModule();
    
    /**
     * @brief 应用样式表
     */
    void applyStyles();
    
    // UI组件
    QVBoxLayout *m_mainLayout;        ///< 主布局
    
    // 战场探索模块
    ModuleCard *m_explorationCard;    ///< 探索模块卡片
    RightDeviceCard *m_robotDogCard;       ///< 机器狗设备卡片
    RightDeviceCard *m_droneCard;          ///< 无人机设备卡片
    QPushButton *m_mappingBtn;        ///< 建图按钮
    QPushButton *m_navigationBtn;     ///< 导航按钮
    QPushButton *m_photoBtn;          ///< 照片传输按钮
    QPushButton *m_recognitionBtn;    ///< 人物识别按钮
    QString m_selectedDevice;         ///< 当前选择的设备
    
    // 情报传输模块
    ModuleCard *m_intelligenceCard;   ///< 情报模块卡片
    QPushButton *m_voiceCallBtn;      ///< 音频控制按钮
    
    // 敌情统计模块
    ModuleCard *m_statsCard;          ///< 统计模块卡片
    QLabel *m_totalEnemiesLabel;      ///< 敌人总数标签
    QLabel *m_threatLevelLabel;       ///< 威胁等级标签
    QPushButton *m_refreshBtn;        ///< 刷新按钮
    QPushButton *m_aiAnalysisBtn;     ///< AI分析按钮
    QPushButton *m_exportBtn;         ///< 导出按钮
};

#endif // RIGHTFUNCTIONPANEL_H