#ifndef INTERACTIVEHAND_H
#define INTERACTIVEHAND_H

#include <QObject>
#include <QJSValue>

#include <QTimer>
#include <QDateTime>

#include <QImage>
#include <QVideoFrame>
#include <QPainter>

#include <QString>
#include <QBuffer>
#include <QByteArray>
#include <QTimerEvent>

#include <QCamera>
#include <QVideoSink>
#include <QMediaDevices>
#include <QMediaCaptureSession>
#include <QQuickImageProvider>

#include <QtMath>
#include <QRandomGenerator>

#include "template_singleton.h"

#include "libs/include/libzkfp.h"
#include "libs/include/libzkfperrdef.h"
#include "libs/include/libzkfptype.h"

#define INTERACTIVE_HAND_IMAGE_URL "InteractiveHandImage"


class InteractiveHand : public QQuickImageProvider
{
    SINGLETON_DEFINE(InteractiveHand)       // 定义为单例类
    Q_OBJECT
private:
    InteractiveHand();
    ~InteractiveHand();

    // 获取图像url
    QString getImageUrl();

public:
    // 设置指纹采集回调
    Q_INVOKABLE void setFingerImageAppearCallBack(QJSValue callback);

    // 指纹图像播放 (采集)
    Q_INVOKABLE void fingerImagePlay();
    // 指纹图像停止 (采集)
    Q_INVOKABLE void fingerImageStop();

public:
    // 初始化指纹句柄
    void initHandle();
    // 销毁指纹句柄
    void destroyHandle();

    QImage getImage();

protected:
    QImage requestImage(const QString &, QSize *, const QSize &);

    void timerEvent(QTimerEvent *event);

private:
    bool m_isInit = false;      // 是否初始化成功

    int m_timerId;      // 当前定时器ID
    int m_FrameId;      // 帧过滤

    QImage m_image;     // 图像

    HANDLE m_handle;    // 指纹采集器句柄
    quint8 m_switch;    // 开关标志

    int m_imageW;       // 图像宽
    int m_imageH;       // 图像高
    QByteArray m_imageData;     // 图像数据

    QByteArray      m_templateData; // 模板数据
    unsigned int    m_templateSize; // 模板长度

    QJSValue m_imageAppearCallback; // 发现指纹回调
};

#endif // INTERACTIVEHAND_H
