-- The configuration has an implict
-- require('scripts/configuration_helper.lua')
-- which defines helper functions useful to customize the configuration

-- Variable: SGCTConfig
-- Determines which SGCT configuration file is loaded, that is, if there
-- rendering occurs in a single window, a fisheye projection,
-- or a dome cluster system

-- A regular 1280x720 window
SGCTConfig = sgct.config.single{vsync=false}
-- A regular 1920x1080 window
-- SGCTConfig = sgct.config.single{1920, 1080}
-- A windowed 1920x1080 fullscreen
-- SGCTConfig = sgct.config.single{1920, 1080, border=false, windowPos={0,0}}
-- A 1k fisheye rendering
-- SGCTConfig = sgct.config.fisheye{1024, 1024}
-- A 4k fisheye rendering in a 1024x1024 window
-- SGCTConfig = sgct.config.fisheye{1024, 1024, res={4096, 4096}, quality="2k", tilt=27}
-- Streaming OpenSpace via Spout to OBS
-- SGCTConfig = sgct.config.single{2560, 1440, shared=true, name="WV_OBS_SPOUT1"}

-- Elumenati Configs
-- SGCTConfig = "${CONFIG}/spout_output_flat.json"
-- SGCTConfig = "${CONFIG}/spout_output_cubemap.json"
-- SGCTConfig = "${CONFIG}/spout_output_equirectangular.json"
-- SGCTConfig = "${CONFIG}/spout_output_fisheye.json"

-- for more details about sgct configuration options see:
-- https://sgct.github.io/configuration-files.html

-- To use a sgct configuration file set the variable like below
-- SGCTConfig = "${CONFIG}/single_gui.xml"
-- In the config/ folder we provide the some predefined files which you can modify.
-- fullscreen1080.json: fullscreen window at 1920x1080
-- gui_projector.json: one window for the gui and a second fullscreen window for rendering
--  on the second monitor
-- openvr_htcVive.json: window for VR on HTC Vive, only works if OpenSpace is compiled
--  custom with the openvr support
-- openvr_oculusRiftCv1.json: window for VR on Oculus Rift, only works if OpenSpace is
--  compiled custom with the openvr support
-- single.json: regular window
-- single_fisheye.json: regular window with fisheye rendering
-- single_fisheye_gui.json: one window for the gui, one window for fisheye rendering
-- single_gui.json: one window for the gui, one window for rendering
-- single_sbs_stereo.json: one window with side by side rendering for stereo/3d support
-- single_two_win.json: two windows with gui and rendering
-- spherical_mirror.json: one window with a spherical mirror rendering
-- spherical_mirror_gui.json: one window for the gui, and one window with a spherical
-- mirror rendering
-- two_nodes.json: a configuration for running two instances of openspace, used for
--  multiple projection systems
-- spout_output_flat.json: a window where the rendering is sent to spout instead of the
--  display
-- spout_output_cubemap.json: a window where the rendering is sent to spout (max of 6 spout
--  instances) instead of the display
-- spout_output_equirectangular.json: a window where the rendering is sent to spout
--  (equirectangular output) instead of the display
-- spout_output_fisheye.json: a window where the rendering is sent to spout (fisheye
--  output) instead of the display

-- Variable: Profile
-- Sets the profile that should be loaded by OpenSpace.
Profile = "default"
-- Profile = "default_full"
-- Profile = "gaia"
-- Profile = "insight"
-- Profile = "juno"
-- Profile = "jwst"
-- Profile = "mars"
-- Profile = "messenger"
-- Profile = "newhorizons"
-- Profile = "osirisrex"
-- Profile = "rosetta"
-- Profile = "touch"
-- Profile = "voyager"


-- These scripts are executed after the initialization of each scene, thus making
-- it possible to have global overrides to default values or execute other scripts
-- regardless of the scene that is loaded
GlobalCustomizationScripts = {
    "${SCRIPTS}/customization.lua"
}

-- Determines how many settings in the menu are shown
-- Valid values:
--  "NoviceUser"
--  "User"
--  "AdvancedUser"
--  "Developer"
PropertyVisibility = os.getenv("OPENSPACE_LEVEL") or "User"

-- Use these paths if you want to put items outside of
-- the main OpenSpace folder. Typically SYNC
Paths = {
    DATA = "${BASE}/data",
    ASSETS = "${DATA}/assets",
    PROFILES = "${DATA}/profiles",
    USER = os.getenv("OPENSPACE_USER") or "${BASE}/user",
    USER_ASSETS = "${USER}/data/assets",
    USER_PROFILES = "${USER}/data/profiles",
    USER_CONFIG = "${USER}/config",
    FONTS = "${DATA}/fonts",
    TASKS = "${DATA}/tasks",
    -- If the the 'OPENSPACE_SYNC' environment variable is defined on the system, use that
    -- value.  Otherwise, fall back to the ${BASE}/sync folder instead.  This allows a
    -- reuse of the sync folder between multiple OpenSpace installations by simply setting
    -- that environment variable
    SYNC = os.getenv("OPENSPACE_SYNC") or "${BASE}/sync",
    SCREENSHOTS = "${USER}/screenshots",
    WEB = "${DATA}/web",
    RECORDINGS = "${USER}/recordings",
    CACHE = "${BASE}/cache",
    CONFIG = "${BASE}/config",
    DOCUMENTATION = "${BASE}/documentation",
    LOGS = "${BASE}/logs",
    MODULES = "${BASE}/modules",
    SCRIPTS = "${BASE}/scripts",
    SHADERS = "${BASE}/shaders",
    TEMPORARY = "${BASE}/temp",
    GLOBEBROWSING = os.getenv("OPENSPACE_GLOBEBROWSING") or "${BASE}/../OpenSpaceData"
}

ModuleConfigurations = {
    GlobeBrowsing = {
        TileCacheSize = 2048, -- for all globes (CPU and GPU memory)
        MRFCacheEnabled = false,
        MRFCacheLocation = "${BASE}/mrf_cache",
        DefaultGeoPointTexture = "${DATA}/globe_pin.png"
    },
    Sync = {
        SynchronizationRoot = "${SYNC}",
        HttpSynchronizationRepositories = {
            "http://data.openspaceproject.com/request"
            -- "http://openspace.sci.utah.edu/request"
            -- "http://localhost:8100/request"
        }
    },
    Server = {
        AllowAddresses = { "127.0.0.1", "localhost" },
        SkyBrowserUpdateTime = 50,
        Interfaces = {
            {
                Type = "TcpSocket",
                Identifier = "DefaultTcpSocketInterface",
                Port = 4681,
                Enabled = true,
                DefaultAccess = "Deny",
                RequirePasswordAddresses = {},
                Password = ""
            },
            {
                Type = "WebSocket",
                Identifier = "DefaultWebSocketInterface",
                Port = 4682,
                Enabled = true,
                DefaultAccess = "Deny",
                RequirePasswordAddresses = {},
                Password = ""
            }
        }
    },
    WebBrowser = {
        Enabled = true
    },
    WebGui = {
        Address = "localhost",
        HttpPort = 4680,
        WebSocketInterface = "DefaultWebSocketInterface"
    },
    CefWebGui = {
        -- GuiScale = 2.0,
        Enabled = true,
        Visible = true
    },
    Space = {
        ShowExceptions = false
    }
    -- OBS! The settings for the SkyBrowser and Exoplanets modules are
    -- set in individual assets, see "data/assets/modules". Note that
    -- any settings addded here might be overwritten by those assets
}

Fonts = {
    Mono = "${FONTS}/Bitstream-Vera-Sans-Mono/VeraMono.ttf",
    Light = "${FONTS}/Roboto/Roboto-Regular.ttf",
    Console = "${FONTS}/Inconsolata/Inconsolata-Regular.ttf",
    Loading = "${FONTS}/Roboto/Roboto-Regular.ttf"
}
FontSize = {
    FrameInfo = 32.0,
    Shutdown = 14.0,
    Log = 8.0,
    CameraInfo = 12.0,
    VersionInfo = 12.0
}

Logging = {
    LogDir = "${LOGS}",
    -- LogLevel = "Trace",
    LogLevel = "Debug",
    ImmediateFlush = true,
    Logs = {
        { Type = "html", File = "${LOGS}/log.html", Append = false }
    },
    CapabilitiesVerbosity = "Full"
}
ScriptLog = "${LOGS}/ScriptLog.txt"

Documentation = {
    Path = "${DOCUMENTATION}/"
}

VersionCheckUrl = "http://data.openspaceproject.com/latest-version"

UseMultithreadedInitialization = true
LoadingScreen = {
    ShowMessage = true,
    ShowNodeNames = true,
    ShowProgressbar = false
}
CheckOpenGLState = false
LogEachOpenGLCall = false
PrintEvents = false
ConsoleKey = "GRAVEACCENT"

ShutdownCountdown = 3
ScreenshotUseDate = true
BypassLauncher = false

-- OnScreenTextScaling = "framebuffer"
-- PerProfileCache = true
-- DisableRenderingOnMaster = true
-- DisableInGameConsole = true

GlobalRotation = { 0.0, 0.0, 0.0 }
MasterRotation = { 0.0, 0.0, 0.0 }
ScreenSpaceRotation = { 0.0, 0.0, 0.0 }

OpenGLDebugContext = {
    Activate = true,
    PrintStacktrace = false,
    FilterIdentifier = {
        { Type = "Other", Source = "API", Identifier = 131185 },
        -- API_ID_RECOMPILE_FRAGMENT_SHADER performance warning has been generated. Fragment shader recompiled due to state change
        { Type = "Performance", Source = "API", Identifier = 2 },
        -- Pixel-path performance warning: Pixel transfer is synchronized with 3D rendering
        { Type = "Performance", Source = "API", Identifier = 131154 },
        -- Buffer performance warning: "copied/moved from VIDEO memory to HOST memory"
        { Type = "Performance", Source = "API", Identifier = 131186 },
        -- API_ID_LINE_WIDTH deprecated behavior warning has been generated
        { Type = "Deprecated", Source = "API", Identifier = 7 },
        -- Program/shader state performance warning: Vertex shader in program %i is being recompiled based on GL state.
        { Type = "Performance", Source = "API", Identifier = 131218 },
        -- This is getting a bit wordy
        { Type = "Push group", Source = "Application", Identifier = 0 },
        { Type = "Pop group", Source = "Application", Identifier = 0 },
   },
-- FilterSeverity = { }
}
