/*
 * Mirai. Copyright (C) 2024 Vyn
 * This file is licensed under version 3 of the GNU General Public License (GPL-3.0-only)
 * The license can be found in the LICENSE file or at https://www.gnu.org/licenses/gpl-3.0.txt
 */

#pragma once

#include "Source.h"
#include <functional>
#include <memory>
#include <optional>
#include <string>

namespace mirai
{

class Mirai
{

  public:
	void loadSource(std::unique_ptr<DataProvider> &&resource);
	void unloadAllSources();
	void save();
	std::optional<std::reference_wrapper<DataProvider>> getSourceByName(const std::string &name);

	std::vector<std::unique_ptr<Source>> &getSources();
	const std::vector<std::string> &getTags();

	// Returns a non owning pointer to the requested resource or nullptr if not found.
	Source *getSourceById(int id);

  private:
	std::vector<std::unique_ptr<Source>> sources_;
	// std::vector<std::string> tags_;
};
} // namespace mirai
