#pragma once

#include "captions-handler.hpp"
#include "captions-mssapi-stream.hpp"
#include <util/windows/HRError.hpp>
#include <util/windows/ComPtr.hpp>
#include <util/windows/WinHandle.hpp>
#include <util/windows/CoTaskMemPtr.hpp>
#include <util/threading.h>
#include <util/platform.h>
#include <sphelper.h>

#include <obs.hpp>

#include <thread>

class mssapi_captions : public captions_handler {
	friend class CaptionStream;

	ComPtr<CaptionStream>  audio;
	ComPtr<ISpObjectToken> token;
	ComPtr<ISpRecoGrammar> grammar;
	ComPtr<ISpRecognizer>  recognizer;
	ComPtr<ISpRecoContext> context;

	HANDLE                 notify;
	WinHandle              stop;
	std::thread            t;
	bool                   started = false;

	void main_thread();

public:
	mssapi_captions(captions_cb callback, const std::string &lang);
	virtual ~mssapi_captions();
	virtual void pcm_data(const void *data, size_t frames) override;
};