#ifndef DEVICEDIALOG_H
#define DEVICEDIALOG_H

#include <QDialog>
#include <QProgressBar>
#include <QTableWidget>
#include <QLabel>
#include <QPushButton>
#include <QTabWidget>

QT_BEGIN_NAMESPACE
namespace Ui {
class DeviceDialog;
}
QT_END_NAMESPACE

/**
 * @brief 设备详情对话框
 * 
 * 显示设备的详细信息，包括基本信息、状态信息和操作日志
 */
class DeviceDialog : public QDialog
{
    Q_OBJECT

public:
    explicit DeviceDialog(QWidget *parent = nullptr);
    ~DeviceDialog();

    /**
     * @brief 设置设备详细信息
     * @param deviceId 设备ID
     * @param name 设备名称
     * @param type 设备类型
     * @param ip IP地址
     * @param port 端口号
     * @param longitude 经度
     * @param latitude 纬度
     * @param state 设备状态
     * @param signalStrength 信号强度
     * @param batteryLevel 电池电量
     * @param firmwareVersion 固件版本
     * @param lastHeartbeat 最后心跳时间
     * @param createdAt 创建时间
     * @param updatedAt 更新时间
     */
    void setDeviceInfo(const QString &deviceId, const QString &name, const QString &type,
                       const QString &ip, int port, double longitude, double latitude,
                       int state, int signalStrength, int batteryLevel,
                       const QString &firmwareVersion, const QString &lastHeartbeat,
                       const QString &createdAt, const QString &updatedAt);

    /**
     * @brief 加载设备操作日志
     * @param deviceId 设备ID
     */
    void loadOperationLogs(const QString &deviceId);

    /**
     * @brief 刷新设备信息
     */
    void refreshDeviceInfo();

public slots:
    /**
     * @brief 连接设备
     */
    void onConnectClicked();

    /**
     * @brief 断开设备
     */
    void onDisconnectClicked();

    /**
     * @brief 定位设备
     */
    void onLocateClicked();

    /**
     * @brief 刷新按钮点击
     */
    void onRefreshClicked();

signals:
    /**
     * @brief 请求连接设备信号
     * @param deviceId 设备ID
     */
    void deviceConnectRequested(const QString &deviceId);

    /**
     * @brief 请求断开设备信号
     * @param deviceId 设备ID
     */
    void deviceDisconnectRequested(const QString &deviceId);

    /**
     * @brief 请求定位设备信号
     * @param deviceId 设备ID
     */
    void deviceLocationRequested(const QString &deviceId);

private:
    /**
     * @brief 初始化UI样式
     */
    void setupStyle();

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

    /**
     * @brief 根据设备类型设置图标
     * @param type 设备类型
     */
    void setDeviceIcon(const QString &type);

    /**
     * @brief 根据状态设置状态标签
     * @param state 状态值
     */
    void setStatusLabel(int state);

    /**
     * @brief 计算运行时长
     * @param createdTime 创建时间
     * @return 运行时长字符串
     */
    QString calculateWorkingTime(const QString &createdTime);

    /**
     * @brief 初始化操作日志表格
     */
    void initializeOperationLogTable();

    /**
     * @brief 记录操作日志
     * @param operation 操作类型
     * @param operatorName 操作员名称
     */
    void logOperation(const QString &operation, const QString &operatorName);

    /**
     * @brief 设置高对比度字体
     */
    void setHighContrastFonts();

private:
    Ui::DeviceDialog *ui;
    QString m_currentDeviceId;  ///< 当前显示的设备ID
};

#endif // DEVICEDIALOG_H