#pragma once

#include "Component.h"
#include <map>
#include <QTimer>
#include <QList>
#include <QMap>

class MinecraftInstance;
using ComponentContainer = QList<ComponentPtr>;
using ComponentIndex = QMap<QString, ComponentPtr>;
using ConnectionList = QList<QMetaObject::Connection>;

struct ComponentListData
{
	// the instance this belongs to
	MinecraftInstance *m_instance;

	// the launch profile (volatile, temporary thing created on demand)
	std::shared_ptr<LaunchProfile> m_profile;

	// version information migrated from instance.cfg file. Single use on migration!
	std::map<QString, QString> m_oldConfigVersions;
	QString getOldConfigVersion(const QString& uid) const
	{
		const auto iter = m_oldConfigVersions.find(uid);
		if(iter != m_oldConfigVersions.cend())
		{
			return (*iter).second;
		}
		return QString();
	}

	// persistent list of components and related machinery
	ComponentContainer components;
	ComponentIndex componentIndex;
	bool dirty = false;
	QTimer m_saveTimer;
	shared_qobject_ptr<Task> m_updateTask;
	bool loaded = false;
};