#pragma once

#include <QThread>
#include "../Model/ThreadModel.h"
#include <thread>

namespace jlib
{
namespace qt
{


class ThreadCtrl : public QThread
{
	Q_OBJECT

public:
	ThreadCtrl(QObject *parent, ThreadWorker worker)
		: QThread(parent)
		, worker_(worker)
	{
	}

	~ThreadCtrl() {}

	void set_worker(ThreadWorker worker) { worker_ = worker; }

	void set_tag(int tag) { tag_ = tag; }
	int get_tag() const { return tag_; }

protected:
	virtual void run() override {
		std::error_code result;

		if (worker_) {
			result = worker_();
		}

		emit sig_ready(tag_, result);
	}

signals:
	void sig_ready(int tag, std::error_code result);
	void sig_progress(int tag, jlib::qt::ThreadProgress progress);

private:
	ThreadWorker worker_ = {};

	void* input_ = nullptr;
	void* output_ = nullptr;

	int tag_ = 0;
};

}
}