#ifndef PROJECT_SETTINGS_H
#define PROJECT_SETTINGS_H
#include <memory>
#include <vector>
#include "LanguageType.h"
#include "Settings.h"
#include "SettingsMigrator.h"
class SourceGroupSettings;
class ProjectSettings: public Settings
{
public:
static const std::wstring PROJECT_FILE_EXTENSION;
static const std::wstring BOOKMARK_DB_FILE_EXTENSION;
static const std::wstring INDEX_DB_FILE_EXTENSION;
static const std::wstring TEMP_INDEX_DB_FILE_EXTENSION;
static const size_t VERSION;
static LanguageType getLanguageOfProject(const FilePath& filePath);
ProjectSettings();
ProjectSettings(const FilePath& projectFilePath);
virtual ~ProjectSettings();
bool equalsExceptNameAndLocation(const ProjectSettings& other) const;
bool needMigration() const;
void migrate();
bool reload();
FilePath getProjectFilePath() const;
void setProjectFilePath(std::wstring projectName, const FilePath& projectFileLocation);
FilePath getDependenciesDirectoryPath() const;
FilePath getDBFilePath() const;
FilePath getTempDBFilePath() const;
FilePath getBookmarkDBFilePath() const;
std::wstring getProjectName() const;
FilePath getProjectDirectoryPath() const;
std::string getDescription() const;
std::vector<std::shared_ptr<SourceGroupSettings>> getAllSourceGroupSettings() const;
void setAllSourceGroupSettings(const std::vector<std::shared_ptr<SourceGroupSettings>>& allSettings);
std::vector<FilePath> makePathsExpandedAndAbsolute(const std::vector<FilePath>& paths) const;
FilePath makePathExpandedAndAbsolute(const FilePath& path) const;
private:
SettingsMigrator getMigrations() const;
};
#endif