#pragma once

#include <qobject.h>
#include <qtclasshelpermacros.h>
#include <qtmetamacros.h>

#include "../buffer/manager.hpp"

namespace qs::wayland::screencopy {

class ScreencopyContext: public QObject {
	Q_OBJECT;

public:
	[[nodiscard]] buffer::WlBufferSwapchain& swapchain() { return this->mSwapchain; }
	virtual void captureFrame() = 0;

signals:
	void frameCaptured();
	void stopped();

protected:
	ScreencopyContext() = default;

	buffer::WlBufferSwapchain mSwapchain;
};

class ScreencopyManager {
public:
	static ScreencopyContext* createContext(QObject* object, bool paintCursors);
};

} // namespace qs::wayland::screencopy