#ifndef HTTPFACELOGIN_H
#define HTTPFACELOGIN_H
#include <QThread>
#include <QtQml/qqml.h>
#include <QByteArray>
#include <QList>
#include <QMutex>

class HttpFaceLogin : public QThread
{
    Q_OBJECT
    QML_NAMED_ELEMENT(HttpFaceLogin)

public:
    explicit HttpFaceLogin(QObject *parent = nullptr);
    /** 设置待上传的人脸图（JPEG 字节），调用 start() 后会在 run 中请求接口 */
    Q_INVOKABLE void setFaceImageData(const QByteArray &data);
    /** 抓取到人脸头像时调用：加入队列，队列最多 10 张，先进先出，后面的挤掉前面的 */
    Q_INVOKABLE void pushFaceImage(const QByteArray &data);
    /** 从队列中随机取一张并移除，用于定时请求 API；队列空则返回空 */
    Q_INVOKABLE QByteArray takeRandomFaceImage();
    /** 清空人脸图队列与缓存，登录成功或关闭时调用 */
    Q_INVOKABLE void clearFaceQueue();

protected:
    void run() override;

private:
    void httpRequestFaceLogin();

public slots:
    void slotHttpResponseFaceLogin(QByteArray data);

signals:
    /** 人脸登录成功，nickName 用于提示「nickName、登录成功」 */
    void signalFaceLoginSuccess(QString nickName);
    /** 人脸登录失败，msg 为 API 返回的错误信息，用于弹窗提示 */
    void signalFaceLoginError(QString msg);
    void signalLoginReturnStat(int stat, QString str);
    void signalLoginReturnParam(QString name, int auth);

private:
    static const int FACE_QUEUE_MAX_SIZE = 10;
    QByteArray m_faceImageData;
    QList<QByteArray> m_faceImageQueue;
    QMutex m_queueMutex;
};
#endif // HTTPFACELOGIN_H
