#pragma once

#include <QString>
#include <QList>
#include <updater/GoUpdate.h>

class QWidget;

class UpdateController
{
public:
	UpdateController(QWidget * parent, const QString &root, const QString updateFilesDir, GoUpdate::OperationList operations);
	void installUpdates();

private:
	void fail();
	bool rollback();

private:
	QString m_root;
	QString m_updateFilesDir;
	GoUpdate::OperationList m_operations;
	QWidget * m_parent;

	struct BackupEntry
	{
		// path where we got the new file from
		QString update;
		// path of what is being actually updated
		QString original;
		// path where the backup of the updated file was placed
		QString backup;
	};
	QList <BackupEntry> m_replace_backups;
	QList <BackupEntry> m_delete_backups;
	enum Failure
	{
		Replace,
		Delete,
		Start,
		Nothing
	} m_failedOperationType = Nothing;
	QString m_failedFile;
};