#ifndef VOICECHATSPEECHCONTROLPROXY_H
#define VOICECHATSPEECHCONTROLPROXY_H

#include <QObject>
#include "voicechatspeech.h"

/**
 * @brief VoiceChatSpeech 的代理类，用于在主线程中提供异步调用接口
 * 
 * 该类在主线程中创建，所有方法调用都通过 QMetaObject::invokeMethod 
 * 异步转发到工作线程中的 VoiceChatSpeech 对象，确保 QML 调用不会阻塞。
 */
class VoiceChatSpeechControlProxy : public QObject
{
    Q_OBJECT
public:
    explicit VoiceChatSpeechControlProxy(VoiceChatSpeech *voiceChatSpeech, QObject *parent = nullptr);
    ~VoiceChatSpeechControlProxy();

    /**
     * @brief 设置实际的 VoiceChatSpeech 对象
     */
    void setVoiceChatSpeech(VoiceChatSpeech *voiceChatSpeech);

signals:
    /**
     * @brief 语音识别信息信号，发送到控制模块并转发到前端生成气泡
     * @param 合成结果内容
     */
    void sigReceiveSpeechRecognitionMessage(const QString message);
    /**
     * @brief 错误信息
     * @param errorCode
     * @param errorMsg
     */
    void sigErrorMsg(const int errorCode, const QString errorMsg);
    /**
     * @brief 回调函数错误信息
     * @param errorCode
     * @param errorMsg
     */
    void sigCallbackErrorMsg(const int errorCode, const QString errorMsg);
    /**
     * @brief 无可用模型
     */
    void sigNoModel();

    /**
     * @brief 当前录音音量信号
     * @param 音量数据，已归一化处理
     */
    void sigCurSpeechVolume(const int volume);

    /**
     * @brief 语音识别已真正开始
     */
    void speechRecognitionStarted();

public:
    /**
     * @brief 初始化语音识别会话
     * @return 语音识别会话是否创建成功（异步调用，返回值可能不准确）
     */
    Q_INVOKABLE bool initSpeechSession();

    /**
     * @brief 关闭语音识别会话
     */
    Q_INVOKABLE void closeSpeechSession();

    /**
     * @brief 启动语音识别
     * @return 是否启动成功（异步调用，返回值可能不准确）
     */
    Q_INVOKABLE bool startSpeechRecognition();

    /**
     * @brief 暂停语音识别
     */
    Q_INVOKABLE void pauseSpeechRecognition();

    /**
     * @brief 继续语音识别
     */
    Q_INVOKABLE void continueSpeechRecognition();

    /**
     * @brief 停止语音识别
     */
    Q_INVOKABLE void stopSpeechRecognition();

private:
    VoiceChatSpeech *m_voiceChatSpeech;  // 实际的工作线程中的 VoiceChatSpeech 对象

    /**
     * @brief 初始化信号转发
     */
    void initSignalForwarding();
};

#endif // VOICECHATSPEECHCONTROLPROXY_H

