#ifndef SECTION
#define SECTION(s, comment)
#endif
#ifndef COMMENT
#define COMMENT(comment)
#endif
#ifndef ENDSECTION
#define ENDSECTION(s)
#endif

COMMENT("The main config file for micetools")
COMMENT("")

SECTION(mice, "General mice settings")
CFG_int(mice, log_level, 4, "1 = Game\n2 = Error\n3 = Warning\n4 = Info\n5 = Misc\n6 = Trace")
CFG_bool(mice, log_to_file, false, "Also log out to log_file")
CFG_str(mice, log_file, "log.txt", "The file to log to if log_to_file is enabled")
CFG_bool(mice, apply_patches, true, "Load and apply patches from patches_file at runtime")
CFG_str(mice, patches_file, "patches.index", "The file to read patches from")
ENDSECTION(mice)

SECTION(launcher, "These options are only used during initial bootstrapping")
CFG_str(launcher, game_binary, "", "Override binary detection")
CFG_bool(launcher, wait_for_debugger, false, "Wait for a debugger to attach when starting")
CFG_int(launcher, startup_delay, 0, "Pause during startup")
CFG_str(launcher, mice_dll, "mice.dll", "The path to mice's DLL")
CFG_str(launcher, inject, "", "Extra DLLs to inject during boot")
ENDSECTION(launcher)

SECTION(sysconf, "System configuration settings")
CFG_int(sysconf, region, 1, "Board region. 1 = Jpn, 2 = USA, 4 = Exp, 8 = Chn")
CFG_bool(sysconf, rental, false, "")
CFG_str(sysconf, serial, "AASE-01A65646203", "")
CFG_hex(sysconf, dipsw, 2, 40, "DIP Switch values")  // Default 40 = 1280x720
ENDSECTION(sysconf)

SECTION(window, "Game window positioning settings")
CFG_bool(window, windowed, true, "Force games into windowed mode")
CFG_bool(window, borderless, false, "Should windowed games run borderless")
CFG_int(window, adaptor, 0, "Display adaptor to use")
CFG_bool(window, centre, true, "Centre the window. X and Y are used otherwise")
CFG_int(window, x, 0, "Window position X")
CFG_int(window, y, 0, "Window position Y")
CFG_bool(window, nosize, false, "Don't change window resolution")
CFG_bool(window, dipsw, true, "Use DIPSW for resolution")
CFG_int(window, w, 0, "Window width (0 to unset)")
CFG_int(window, h, 0, "Window height (0 to unset)")
ENDSECTION(window)

SECTION(network, "Network configuration settings")
CFG_ipv4(network, ip_address, 192, 168, 103, 101, "")
CFG_ipv4(network, subnet_mask, 255, 255, 255, 0, "")
CFG_ipv4(network, gateway, 192, 168, 103, 254, "")
CFG_ipv4(network, primary_dns, 192, 168, 103, 254, "")
CFG_ipv4(network, secondary_dns, 0, 0, 0, 0, "")
COMMENT("Emulated DNS records. Routers must be pingable!")
CFG_ipv4(network, naominet_jp, 10, 0, 0, 2, "")
CFG_ipv4(network, ib_naominet_jp, 10, 0, 0, 2, "")
CFG_ipv4(network, aime_naominet_jp, 10, 0, 0, 2, "")
CFG_ipv4(network, tenporouter_loc, 127, 0, 0, 1, "")
CFG_ipv4(network, bbrouter_loc, 127, 0, 0, 1, "")
CFG_ipv4(network, mobirouter_loc, 127, 0, 0, 1, "")
CFG_ipv4(network, dslrouter_loc, 127, 0, 0, 1, "")
COMMENT("Second half of system mac address. The vendor prefix D8:BB:C1: will be prepended")
CFG_hex(network, mac, 6, 0A2F1D, "")
ENDSECTION(network)

SECTION(drivers, "Enable or disable drivers. Disabling any is not recommended.")
CFG_bool(drivers, columba, true, "")
CFG_bool(drivers, mxsram, true, "")
CFG_bool(drivers, mxsuperio, true, "")
CFG_bool(drivers, mxjvs, true, "")
CFG_bool(drivers, mxhwreset, true, "")
CFG_bool(drivers, mxsmbus, true, "")
CFG_bool(drivers, mxparallel, true, "")
CFG_bool(drivers, platform, true, "")
ENDSECTION(drivers)

SECTION(hooks, "Enable or disable hooks. Disabling any is not recommended.")
CFG_bool(hooks, logging, true, "Hooks logging functions and the eventlog to capture game logs")
CFG_bool(hooks, gui, true, "Required for overlays to work")
CFG_bool(hooks, setupapi, true, "Required for SRAM")
CFG_bool(hooks, commio, true, "Emulates COM devices")
CFG_bool(hooks, io, true, "Hooks all file IO operations, including driver communication")
CFG_bool(hooks, processes, true, "Controls process spawning to re-hook children")
CFG_bool(hooks, network, true, "Provides a virtual network environment for the game")
CFG_bool(hooks, time, true, "Some binaries try to change the system time; this handles that")
CFG_bool(hooks, registry, true, "")
CFG_bool(hooks, drives, true, "Provides an emulation layer for the physical game SSD")
CFG_bool(hooks, system, true, "")
ENDSECTION(hooks)

SECTION(keys, "Raw keybinding data. Edit this using the built in binding tool!")
CFG_int(keys, test, 0, "")
CFG_int(keys, service, 0, "")
CFG_int(keys, board_count, 1, "")
CFG_str(keys, keys, 0, "")
ENDSECTION(keys)

SECTION(devices, "Register attached hardware devices. COM4 is reserved for JVS.")
CFG_bool(devices, do_auto, true, "When true, if the running game is identified, the following 7 values are overwritten.")
CFG_str(devices, com1, "", "")
CFG_str(devices, com2, "", "")
CFG_str(devices, com3, "", "")
CFG_str(devices, com5, "", "")
CFG_str(devices, com6, "", "")
CFG_str(devices, com7, "", "")
CFG_str(devices, com8, "", "")
ENDSECTION(devices)

#undef CFG_str
#undef CFG_int
#undef CFG_bool
#undef CFG_hex
#undef CFG_ipv4
#undef SECTION
#undef COMMENT
#undef ENDSECTION
