#pragma once

#include <QString>

// Пути к данным лаунчера. Собственная папка galeonLauncher лежит рядом со
// стандартной .minecraft, а не в системном каталоге приложения.
namespace LauncherPaths {

// Родительская папка, в которой лежит .minecraft (и наша galeonLauncher).
QString containerDir();

// <containerDir>/galeonLauncher — корень данных лаунчера.
QString rootDir();

// Стандартная папка игры.
QString defaultMinecraftDir();

QString settingsFile();
QString profilesFile();

// <root>/customBuilds.json — пользовательские сборки.
QString customBuildsFile();

// <root>/versions.json — как сборки назывались до переименования. Читается
// один раз при миграции и больше ни для чего не нужен.
QString legacyCustomBuildsFile();

// <root>/builds — архивы содержимого .minecraft по одному на сборку.
QString buildStorageDir();

// Сюда качается authlib-injector.
QString runtimeDir();

// <root>/java — сборки Java, скачанные лаунчером. Каждая в своей подпапке,
// имя подпапки — идентификатор сборки из каталога.
QString javaDir();

// Слепок каталога доступных сборок Java с отметкой времени.
QString javaCatalogFile();

// Сюда качаются архивы Temurin до распаковки.
QString javaDownloadDir();

// <root>/cache — данные, которые можно удалить без потерь.
QString cacheDir();

// Слепок манифеста версий Mojang с отметкой времени.
QString versionManifestFile();

// Слепок списка версий одного модлоадера: loaderKey — forge|fabric|neoforge|quilt.
QString loaderCacheFile(const QString &loaderKey);

// Сюда качаются installer.jar модлоадеров.
QString loaderDownloadDir();

// Создаёт папку лаунчера, если её нет. Вызывается при каждом запуске и перед
// каждой записью. false и текст в error, если папки нет или в неё не пишется.
bool ensureRootExists(QString *error = nullptr);

} // namespace LauncherPaths
