#ifndef D9171C14_8ED0_407B_A289_4C75D30D9DCC
#define D9171C14_8ED0_407B_A289_4C75D30D9DCC

#include <string>
#include <gh_global.h>

struct R3Config {
  // The root directory of the game, containing the executable
  std::string gameRootDir;
  // Language code of the game "English", etc.
  std::string language;
  // The adapter to use
  int gfxAdapter{};
  // The UUID of the device to use
  std::string gfxIdentifier;
  // Game default is "1 - 640 x 480 x 16"
  //  first digit 1 is fullscreen, 0 is windowed
  //  second digit is width
  //  third digit is height
  //  fourth digit is bpp
  std::string gfxGliMode;
  // Any of:
  //   Agp8
  //   Agp4
  //   Vram8
  //   Vram4
  //   Vram+
  //   Vram
  std::string gfxTexturesMem;
  bool gfxTexturesCompressed{};
  bool gfxTnl{};
  bool gfxTrilinear{};
  int cameraHorizontalAxis = 2;
  int cameraVerticalAxis = 5;
  std::string gameDataBinPath;
};

inline R3Config createDefaultConfig() {
  R3Config config{};
#ifdef R3_GAME_DATA_DIR
  config.gameRootDir = R3_GAME_DATA_DIR;
#endif

  // Windowed 720p
  config.gfxGliMode = "0 - 1200 x 720 x 16";
  config.gfxAdapter = 0;
  config.gfxIdentifier = "00000000-0000-0000-0000-000000000000";
  config.language = s_English_005b684c;
  config.gfxTexturesMem = "Vram+";
  config.gfxTrilinear = true;
  config.gfxTnl = true;
  config.gfxTexturesCompressed = false;
  config.gameDataBinPath = "Gamedatabin";
  return config;
}

inline R3Config &getDefaultConfig() {
  static R3Config config = createDefaultConfig();
  return config;
}

#endif /* D9171C14_8ED0_407B_A289_4C75D30D9DCC */
