#ifndef _AUTOTHREAD_H
#define _AUTOTHREAD_H

#include <siacommon.h>

NS_BEGIN(Sia)
NS_BEGIN(Api)

class CSiaDriveConfig;
class CSiaCurl;
class SIADRIVE_EXPORTABLE CAutoThread
{
public:
	CAutoThread(CSiaDriveConfig* siaDriveConfig);
	CAutoThread(CSiaDriveConfig* siaDriveConfig, std::function<void(CSiaDriveConfig*)> autoThreadCallback);

public:
	virtual ~CAutoThread();

private:
  bool _stopRequested;
	CSiaDriveConfig* _siaDriveConfig;
	std::function<void(CSiaDriveConfig*)> _AutoThreadCallback;
	std::unique_ptr<std::thread>  _thread;
	std::mutex _startStopMutex;
  std::mutex _stopMutex;
  std::condition_variable _stopEvent;

protected:
	virtual void AutoThreadCallback(CSiaDriveConfig* siaDriveConfig);

public:
  bool IsRunning() const;
	void StartAutoThread();
	void StopAutoThread();
};

NS_END(2)
#endif //_AUTOTHREAD_H