#pragma once
#include <string>

struct LogSettings
{
    // The following strings are not localizable
    inline const static std::wstring defaultLogLevel = L"trace";
    inline const static std::wstring logLevelOption = L"logLevel";
    inline const static std::string runnerLoggerName = "runner";
    inline const static std::wstring logPath = L"Logs\\";
    inline const static std::wstring runnerLogPath = L"RunnerLogs\\runner-log.txt";
    inline const static std::string actionRunnerLoggerName = "action-runner";
    inline const static std::wstring actionRunnerLogPath = L"RunnerLogs\\action-runner-log.txt";
    inline const static std::string updateLoggerName = "update";
    inline const static std::wstring updateLogPath = L"UpdateLogs\\update-log.txt";
    inline const static std::string fileExplorerLoggerName = "FileExplorer";
    inline const static std::wstring fileExplorerLogPath = L"Logs\\file-explorer-log.txt";
    inline const static std::string gcodePrevLoggerName = "GcodePrevHandler";
    inline const static std::wstring gcodePrevLogPath = L"logs\\FileExplorer_localLow\\GcodePreviewHandler\\gcode-prev-handler-log.txt";
    inline const static std::string gcodeThumbLoggerName = "GcodeThumbnailProvider";
    inline const static std::wstring gcodeThumbLogPath = L"logs\\FileExplorer_localLow\\GcodeThumbnailProvider\\gcode-thumbnail-provider-log.txt";
    inline const static std::string mdPrevLoggerName = "MDPrevHandler";
    inline const static std::wstring mdPrevLogPath = L"logs\\FileExplorer_localLow\\MDPrevHandler\\md-prev-handler-log.txt";
    inline const static std::string monacoPrevLoggerName = "MonacoPrevHandler";
    inline const static std::wstring monacoPrevLogPath = L"logs\\FileExplorer_localLow\\MonacoPrevHandler\\monaco-prev-handler-log.txt";
    inline const static std::string pdfPrevLoggerName = "PdfPrevHandler";
    inline const static std::wstring pdfPrevLogPath = L"logs\\FileExplorer_localLow\\PdfPrevHandler\\pdf-prev-handler-log.txt";
    inline const static std::string pdfThumbLoggerName = "PdfThumbnailProvider";
    inline const static std::wstring pdfThumbLogPath = L"logs\\FileExplorer_localLow\\PdfThumbnailProvider\\pdf-thumbnail-provider-log.txt";
    inline const static std::string qoiPrevLoggerName = "QoiPrevHandler";
    inline const static std::wstring qoiPrevLogPath = L"logs\\FileExplorer_localLow\\QoiPreviewHandler\\qoi-prev-handler-log.txt";
    inline const static std::string qoiThumbLoggerName = "QoiThumbnailProvider";
    inline const static std::wstring qoiThumbLogPath = L"logs\\FileExplorer_localLow\\QoiThumbnailProvider\\qoi-thumbnail-provider-log.txt";
    inline const static std::string stlThumbLoggerName = "StlThumbnailProvider";
    inline const static std::wstring stlThumbLogPath = L"logs\\FileExplorer_localLow\\StlThumbnailProvider\\stl-thumbnail-provider-log.txt";
    inline const static std::string svgPrevLoggerName = "SvgPrevHandler";
    inline const static std::wstring svgPrevLogPath = L"logs\\FileExplorer_localLow\\SvgPrevHandler\\svg-prev-handler-log.txt";
    inline const static std::string svgThumbLoggerName = "SvgThumbnailProvider";
    inline const static std::wstring svgThumbLogPath = L"logs\\FileExplorer_localLow\\SvgThumbnailProvider\\svg-thumbnail-provider-log.txt";
    inline const static std::string launcherLoggerName = "launcher";
    inline const static std::wstring launcherLogPath = L"LogsModuleInterface\\launcher-log.txt";
    inline const static std::string mouseWithoutBordersLoggerName = "mouseWithoutBorders";
    inline const static std::wstring mouseWithoutBordersLogPath = L"LogsModuleInterface\\mouseWithoutBorders-log.txt";
    inline const static std::wstring awakeLogPath = L"Logs\\awake-log.txt";
    inline const static std::wstring powerAccentLogPath = L"quick-accent-log.txt";
    inline const static std::string fancyZonesLoggerName = "fancyzones";
    inline const static std::wstring fancyZonesLogPath = L"fancyzones-log.txt";
    inline const static std::wstring fancyZonesOldLogPath = L"FancyZonesLogs\\"; // needed to clean up old logs
    inline const static std::string shortcutGuideLoggerName = "shortcut-guide";
    inline const static std::wstring shortcutGuideLogPath = L"ShortcutGuideLogs\\shortcut-guide-log.txt";
    inline const static std::wstring powerOcrLogPath = L"Logs\\text-extractor-log.txt";
    inline const static std::string keyboardManagerLoggerName = "keyboard-manager";
    inline const static std::wstring keyboardManagerLogPath = L"Logs\\keyboard-manager-log.txt";
    inline const static std::string findMyMouseLoggerName = "find-my-mouse";
    inline const static std::string mouseHighlighterLoggerName = "mouse-highlighter";
    inline const static std::string mouseJumpLoggerName = "mouse-jump";
    inline const static std::string mousePointerCrosshairsLoggerName = "mouse-pointer-crosshairs";
    inline const static std::string imageResizerLoggerName = "imageresizer";
    inline const static std::string powerRenameLoggerName = "powerrename";
    inline const static std::string alwaysOnTopLoggerName = "always-on-top";
    inline const static std::string powerOcrLoggerName = "TextExtractor";
    inline const static std::string fileLocksmithLoggerName = "FileLocksmith";
    inline const static std::wstring alwaysOnTopLogPath = L"always-on-top-log.txt";
    inline const static std::string hostsLoggerName = "hosts";
    inline const static std::wstring hostsLogPath = L"Logs\\hosts-log.txt";
    inline const static std::string registryPreviewLoggerName = "registrypreview";
    inline const static std::string cropAndLockLoggerName = "crop-and-lock";
    inline const static std::wstring registryPreviewLogPath = L"Logs\\registryPreview-log.txt";
    inline const static std::string environmentVariablesLoggerName = "environment-variables";
    inline const static std::wstring cmdNotFoundLogPath = L"Logs\\cmd-not-found-log.txt";
    inline const static std::string cmdNotFoundLoggerName = "cmd-not-found";
    inline const static int retention = 30;
    std::wstring logLevel;
    LogSettings();
};

// Get log settings from file. File with default options is created if it does not exist
LogSettings get_log_settings(std::wstring_view file_name);
