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"
-- "GlobalRoll"
-- "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 NOT Sticky.
-- Seventh parameter can be used to reverse the camera movement for the axis
-- Eighth parameter is the sensitivity for the axis

local SpaceMouse = {
  -- Axes
  Push = {
    LeftRight = 0,
    BackForth = 1,
    UpDown = 2
  },
  Twist = 5,
  Tilt = {
    LeftRight = 4,
    BackForth = 3
  },

  -- Buttons on the Enterprise version of the SpaceMouse is not detectable, use regular
  -- keybindings instead, for more information see our wiki page
  -- http://wiki.openspaceproject.com/docs/users/navigation/joysticks.html.
}


asset.onInitialize(function()
  local controller = SpaceMouse
  local name = "3Dconnexion Universal Receiver"

  local deadzone = 0.15
  openspace.navigation.setAxisDeadZone(name, controller.Push.LeftRight, deadzone)
  openspace.navigation.setAxisDeadZone(name, controller.Push.BackForth, deadzone)
  openspace.navigation.setAxisDeadZone(name, controller.Twist, deadzone)
  openspace.navigation.setAxisDeadZone(name, controller.Tilt.BackForth, deadzone)
  openspace.navigation.setAxisDeadZone(name, controller.Push.UpDown, deadzone)
  openspace.navigation.setAxisDeadZone(name, controller.Tilt.LeftRight, deadzone)

  openspace.navigation.bindJoystickAxis(name, controller.Push.LeftRight, "Orbit X")
  openspace.navigation.bindJoystickAxis(name, controller.Push.BackForth, "Orbit Y")
  openspace.navigation.bindJoystickAxis(name, controller.Twist, "Pan X", true)
  openspace.navigation.bindJoystickAxis(name, controller.Tilt.BackForth, "Pan Y")
  openspace.navigation.bindJoystickAxis(name, controller.Push.UpDown, "Zoom")
  openspace.navigation.bindJoystickAxis(name, controller.Tilt.LeftRight, "LocalRoll")
end)
