#ifndef NFCREADERWORKER_H
#define NFCREADERWORKER_H

#include <QObject>
#include <memory>

#include "DataTypeDef.h"

class M4255NFCHelper;

struct charging_control_info_t {
    int     gunID;
    int     nfcExecResult;
    bool    requestPowerByMinutes{false};
    int     minutes{0};
    bool    requestPowerByPowerKW{false};
    int     powerKW{0};
    bool    requestPowerBySoc{false};
    int     soc{0};
    int     authType;
    int     cmd;
    QString cardID{""};
};
Q_DECLARE_METATYPE(charging_control_info_t)

/**
 * @brief NFCReaderWorker 类用于处理NFC读卡器的工作。
 * 
 * 该类继承自QObject，用于在Qt框架中实现NFC读卡器的功能。它提供了处理NFC读卡器工作的核心功能，
 * 包括连接读卡器、读取卡片信息、关闭读卡器端口等。
 * 
 * 核心功能包括：
 * - 连接指定端口上的NFC读卡器
 * - 读取卡片信息
 * - 关闭读卡器端口
 * - 发送读取结果信号
 * 
 * 使用示例：
 * @code
 * NFCReaderWorker *worker = new NFCReaderWorker();
 * worker->doWork("COM3", 1, 5000);
 * @endcode
 * 
 * 构造函数参数：
 * - parent: QObject的父对象，默认为nullptr
 * 
 * 注意事项：
 * - 使用该类时，需要确保已正确配置Qt环境，并且已连接到正确的NFC读卡器。
 * - 在使用完毕后，应调用closePort()方法关闭读卡器端口。
 * - 读取卡片信息时，需要提供一个charging_control_info_t类型的引用参数，用于存储读取结果。
 */
class NFCReaderWorker : public QObject
{
    Q_OBJECT

public:
    explicit NFCReaderWorker(QObject *parent = nullptr);
    ~NFCReaderWorker();

public slots:
    /**
     * @brief 连接到指定端口上的NFC读卡器，并开始工作。
     * 
     * @param portName 读卡器连接的端口名称
     * @param gunId 读卡器ID
     * @param timeout 超时时间，单位为毫秒
     */
    void doWork(const QString& portName, int gunId, int timeout);

    /**
     * @brief 读取卡片信息。
     * 
     * @param data 用于存储读取结果的charging_control_info_t类型的引用
     */
    void doReadCard(charging_control_info_t& data);

    /**
     * @brief 关闭读卡器端口。
     */
    void closePort();

signals:
    /**
     * @brief 读取结果准备就绪信号。
     * 
     * @param authResult 认证结果
     * @param cardId 卡片ID
     */
    void resultReady(int authResult, const QString& cardId);

    /**
     * @brief 执行结果准备就绪信号。
     * 
     * @param data 用于存储执行结果的charging_control_info_t类型的引用
     */
    void execResultReady(charging_control_info_t& data);

private:
    std::unique_ptr<M4255NFCHelper> m_activeReader;
    TCU_CFG m_tcu_cfg;
};

#endif // NFCREADERWORKER_H 
