#ifndef MQTTTHREAD_H
#define MQTTTHREAD_H

#include <QString>
#include <QStringList>
#include <QThread>

#include "./mqtt/mqttclient.h"

class MqttClient;

class MqttThread : public QThread {
    Q_OBJECT
   public:
    MqttThread(QObject *parent = nullptr);
    ~MqttThread();
    void stopThread();

    void sendMqttMessage(const QString &topic, const QByteArray &message, quint8 qos,
                         bool isRetainedMsg);
    void setConnectionInfo(const QString &hostname, quint16 port, const QString &username,
                           const QString &password, const QString &clientId,
                           const QStringList &topicsToSubscribe);
    MqttClient *getMqttClient() const;

   signals:
    void mqttConnected();
    // 转发 MQTT 消息接收信号
    void projectMqttMessageReceived(const QByteArray &message, const QMqttTopicName &topic);
    void sendMessageRequested(const QString &topic, const QByteArray &message, quint8 qos,
                              bool isRetainedMsg);

   protected:
    void run() override;

   private:
    MqttClient *mqttClient = nullptr;
    QString m_hostname;
    quint16 m_port;
    QString m_username;
    QString m_password;
    QString m_clientId;
    QStringList m_topicsToSubscribe;
    bool m_stopFlag = false;
};
#endif  // MQTTTHREAD_H
