#pragma once

#include <common/utils/json.h>
#include <common/SettingsAPI/settings_objects.h>

enum class DashboardSortOrder
{
    Alphabetical = 0,
    ByStatus = 1,
};

struct GeneralSettings
{
    bool isStartupEnabled;
    bool showSystemTrayIcon;
    bool showThemeAdaptiveTrayIcon;
    std::wstring startupDisabledReason;
    std::map<std::wstring, bool> isModulesEnabledMap;
    bool isElevated;
    bool isRunElevated;
    bool isAdmin;
    bool enableWarningsElevatedApps;
    bool enableQuickAccess;
    PowerToysSettings::HotkeyObject quickAccessShortcut;
    bool showNewUpdatesToastNotification;
    bool downloadUpdatesAutomatically;
    bool showWhatsNewAfterUpdates;
    bool enableExperimentation;
    DashboardSortOrder dashboardSortOrder;
    std::wstring theme;
    std::wstring systemTheme;
    std::wstring powerToysVersion;
    json::JsonObject ignoredConflictProperties;

    json::JsonObject to_json();
};

json::JsonObject load_general_settings();
GeneralSettings get_general_settings();
void apply_general_settings(const json::JsonObject& general_configs, bool save = true);
void apply_module_status_update(const json::JsonObject& module_config, bool save = true);
void start_enabled_powertoys();