#ifndef SQLITE_H
#define SQLITE_H
#include <string>
#include <sqlite3.h>
#include <sqlite_modern_cpp.h>
#include "database.h"

class Sqlite : public Database
{
  private:
	bool inTransaction = false;
	std::shared_ptr<sqlite::database> db;

	template <class T> std::unique_ptr<T> create() const
	{
		return std::make_unique<T>(db);
	}

  public:
	Sqlite(std::string path);
	std::unique_ptr<PageDao> createPageDao() const;
	std::unique_ptr<RevisionDao> createRevisionDao() const;
	std::unique_ptr<UserDao> createUserDao() const;
	std::unique_ptr<SessionDao> createSessionDao() const;
	std::unique_ptr<CategoryDao> createCategoryDao() const;
	std::unique_ptr<PermissionsDao> createPermissionsDao() const;
	void beginTransaction();
	void commitTransaction();
	void rollbackTransaction();
};

#endif // SQLITE_H