local propertyHelper = asset.require("../property_helper")
local joystickHelper = asset.require("./joystick_helper")

-- Allowed values for the third parameter of bindJoystickAxis:
-- "None"
-- "Orbit X"
-- "Orbit Y"
-- "Zoom" -- both in and out
-- "Zoom In"
-- "Zoom Out"
-- "LocalRoll X"
-- "LocalRoll Y"
-- "GlobalRoll X"
-- "GlobalRoll Y"
-- "Pan X"
-- "Pan Y"
-- Fourth parameter determines whether the axis should be inverted
-- Fifth parameter determines whether the axis behaves like a joystick or a Trigger.
--       Allowed values are "JoystickLike" and "TriggerLike", the first one is the default
-- Sixth parameters determins if the axis should be "Sticky" or not.
--       The axis values can either go back to 0 when the joystick is released or it can
--       stay at the value it was before the joystick was released.
--       The latter is called a sticky axis, when the values don't go back to 0.
--       This version of the SpaceMouse IS Sticky.
-- Seventh parameter is the sensitivity for the axis

local SpaceMouse = {
  Push = {0, 1, 2}, -- left/right, back/forth, up/down
  Twist = {5}, -- left/right
  Tilt = {4, 3}, -- left/right, back/forth

  LeftButton = 0,
  RightButton = 1
}

asset.onInitialize(function()
  local controller = SpaceMouse;
  local name = "SpaceNavigator";

  openspace.navigation.bindJoystickAxis(name, controller.Push[1], "Orbit X", false, "JoystickLike", true, 40.0);
  openspace.navigation.bindJoystickAxis(name, controller.Push[2], "Orbit Y", false, "JoystickLike", true, 40.0);
  openspace.navigation.bindJoystickAxis(name, controller.Twist[1], "Pan X", true, "JoystickLike", true, 40.0);
  openspace.navigation.bindJoystickAxis(name, controller.Tilt[2], "Pan Y", false, "JoystickLike", true, 35.0);
  openspace.navigation.bindJoystickAxis(name, controller.Push[3], "Zoom", false, "JoystickLike", true, 40.0);
  openspace.navigation.bindJoystickAxis(name, controller.Tilt[1], "LocalRoll X", false, "JoystickLike", true, 35.0);

  openspace.navigation.bindJoystickButton(
    name,
    controller.LeftButton,
    joystickHelper.permaBindLocalRoll(name, controller.Tilt[1]),
    "Switch to local roll mode"
  )

  openspace.navigation.bindJoystickButton(
    name,
    controller.RightButton,
    joystickHelper.permaBindGlobalRoll(name, controller.Tilt[1]),
    "Switch to global roll mode"
  )
end)
