//
//  touchControllerConfiguration.js
//
//  Created by Ryan Huffman on 12/06/16
//
//  Distributed under the Apache License, Version 2.0.
//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//

/* globals TOUCH_CONTROLLER_CONFIGURATION_LEFT:true TOUCH_CONTROLLER_CONFIGURATION_RIGHT:true */
/* eslint camelcase: ["error", { "properties": "never" }] */

var leftBaseRotation = Quat.multiply(
    Quat.fromPitchYawRollDegrees(-90, 0, 0),
    Quat.fromPitchYawRollDegrees(0, 0, 90)
);
var rightBaseRotation = Quat.multiply(
    Quat.fromPitchYawRollDegrees(-90, 0, 0),
    Quat.fromPitchYawRollDegrees(0, 0, -90)
);

// keep these in sync with the values from OculusHelpers.cpp
var CONTROLLER_LENGTH_OFFSET = 0.0762;
var CONTROLLER_LATERAL_OFFSET = 0.0381;
var CONTROLLER_VERTICAL_OFFSET = 0.0381;
var CONTROLLER_FORWARD_OFFSET = 0.1524;

var leftBasePosition = Vec3.multiplyQbyV(leftBaseRotation, {
    x: -CONTROLLER_LENGTH_OFFSET / 2.0,
    y: CONTROLLER_LENGTH_OFFSET / 2.0,
    z: CONTROLLER_LENGTH_OFFSET * 1.5
});
var rightBasePosition = Vec3.multiplyQbyV(rightBaseRotation, {
    x: CONTROLLER_LENGTH_OFFSET / 2.0,
    y: CONTROLLER_LENGTH_OFFSET / 2.0,
    z: CONTROLLER_LENGTH_OFFSET * 1.5
});

var BASE_URL = Script.resourcesPath() + "meshes/controller/touch/";

TOUCH_CONTROLLER_CONFIGURATION_LEFT = {
    name: "Touch",
    controllers: [
        {
            modelURL: BASE_URL + "touch_l_body.fbx",
            jointIndex: MyAvatar.getJointIndex("_CONTROLLER_LEFTHAND"),
            naturalPosition: { x: 0.01648625358939171, y: -0.03551870584487915, z: -0.018527675420045853 },
            dimensions: { x: 0.11053799837827682, y: 0.0995776429772377, z: 0.10139888525009155 },
            rotation: leftBaseRotation,
            position: leftBasePosition,

            parts: {
                tips: {
                    type: "static",
                    modelURL: BASE_URL + "Oculus-Labels-L.fbx",
                    naturalPosition: { x: -0.022335469722747803, y: 0.00022516027092933655, z: 0.020340695977211 },
                    naturalDimensions: { x: 0.132063, y: 0.0856, z: 0.130282 },

                    textureName: "blank",
                    defaultTextureLayer: "blank",
                    textureLayers: {
                        blank: {
                            defaultTextureURL: BASE_URL + "Oculus-Labels-L.fbx/Oculus-Labels-L.fbm/Blank.png"
                        },
                        trigger: {
                            defaultTextureURL: BASE_URL + "Oculus-Labels-L.fbx/Oculus-Labels-L.fbm/Trigger.png"
                        },
                        arrows: {
                            defaultTextureURL: BASE_URL + "Oculus-Labels-L.fbx/Oculus-Labels-L.fbm/Rotate.png"
                        },
                        grip: {
                            defaultTextureURL: BASE_URL + "Oculus-Labels-L.fbx/Oculus-Labels-L.fbm/Grip-oculus.png"
                        },
                        teleport: {
                            defaultTextureURL: BASE_URL + "Oculus-Labels-L.fbx/Oculus-Labels-L.fbm/Teleport.png"
                        },
                        both_triggers: {
                            defaultTextureURL: BASE_URL + "Oculus-Labels-L.fbx/Oculus-Labels-L.fbm/Grip-Trigger.png"
                        },
                    }
                },

                trigger: {
                    type: "rotational",
                    modelURL: BASE_URL + "touch_l_trigger.fbx",
                    naturalPosition: { x: 0.0008544912561774254, y: -0.019867943599820137, z: 0.018800459802150726 },
                    naturalDimensions: { x: 0.027509, y: 0.025211, z: 0.018443 },

                    // rotational 
                    input: Controller.Standard.LT,
                    origin: { x: 0, y: -0.015, z: -0.00 },
                    minValue: 0.0,
                    maxValue: 1.0,
                    axis: { x: 1, y: 0, z: 0 },
                    maxAngle: 17,

                    textureName: "tex-highlight",
                    defaultTextureLayer: "normal",
                    textureLayers: {
                        normal: {
                            defaultTextureURL: BASE_URL + "touch_l_trigger.fbx/touch_l_trigger.fbm/L_controller_DIF.jpg",
                        },
                        highlight: {
                            defaultTextureURL: BASE_URL + "touch_l_trigger.fbx/touch_l_trigger.fbm/L_controller-highlight_DIF.jpg",
                        }
                    }
                },

                grip: {
                    type: "linear",
                    modelURL: BASE_URL + "touch_l_bumper.fbx",
                    naturalPosition: { x: 0.00008066371083259583, y: -0.02715788595378399, z: -0.02448512241244316 },
                    naturalDimensions: { x: 0.017444, y: 0.020297, z: 0.026003 },

                    // linear properties
                    // Offset from origin = 0.36470, 0.11048, 0.11066
                    input: "OculusTouch.LeftGrip",
                    axis: { x: 1, y: 0.302933918, z: 0.302933918 },
                    maxTranslation: 0.003967,

                    textureName: "tex-highlight",
                    defaultTextureLayer: "normal",
                    textureLayers: {
                        normal: {
                            defaultTextureURL: BASE_URL + "touch_l_bumper.fbx/touch_l_bumper.fbm/L_controller_DIF.jpg",
                        },
                        highlight: {
                            defaultTextureURL: BASE_URL + "touch_l_bumper.fbx/touch_l_bumper.fbm/L_controller-highlight_DIF.jpg",
                        }
                    }
                },

                joystick: {
                    type: "joystick",
                    modelURL: BASE_URL + "touch_l_joystick.fbx",
                    naturalPosition: { x: 0.0075613949447870255, y: -0.008225866593420506, z: 0.004792703315615654 },
                    naturalDimensions: { x: 0.027386, y: 0.033254, z: 0.027272 },

                    // joystick
                    xInput: "OculusTouch.LX",
                    yInput: "OculusTouch.LY",
                    originOffset: { x: 0, y: -0.0028564, z: -0.00 },
                    xHalfAngle: 20,
                    yHalfAngle: 20,

                    textureName: "tex-highlight",
                    defaultTextureLayer: "normal",
                    textureLayers: {
                        normal: {
                            defaultTextureURL: BASE_URL + "touch_l_joystick.fbx/touch_l_joystick.fbm/L_controller_DIF.jpg",
                        },
                        highlight: {
                            defaultTextureURL: BASE_URL + "touch_l_joystick.fbx/touch_l_joystick.fbm/L_controller-highlight_DIF.jpg",
                        }
                    }
                },

                button_a: {
                    type: "linear",
                    modelURL: BASE_URL + "touch_l_button_x.fbx",
                    naturalPosition: { x: -0.009307309985160828, y: -0.00005015172064304352, z: -0.012594521045684814 },
                    naturalDimensions: { x: 0.009861, y: 0.004345, z: 0.00982 },

                    input: "OculusTouch.X",
                    axis: { x: 0, y: -1, z: 0 },
                    maxTranslation: 0.001,

                    textureName: "tex-highlight",
                    defaultTextureLayer: "normal",
                    textureLayers: {
                        normal: {
                            defaultTextureURL: BASE_URL + "touch_l_button_x.fbx/touch_l_button_x.fbm/L_controller_DIF.jpg",
                        },
                        highlight: {
                            defaultTextureURL: BASE_URL + "touch_l_button_x.fbx/touch_l_button_x.fbm/L_controller-highlight_DIF.jpg",
                        }
                    }
                },

                button_b: {
                    type: "linear",
                    modelURL: BASE_URL + "touch_l_button_y.fbx",
                    naturalPosition: { x: -0.01616849936544895, y: -0.000050364527851343155, z: 0.0017703399062156677 },
                    naturalDimensions: { x: 0.010014, y: 0.004412, z: 0.009972 },

                    input: "OculusTouch.Y",
                    axis: { x: 0, y: -1, z: 0 },
                    maxTranslation: 0.001,

                    textureName: "tex-highlight",
                    defaultTextureLayer: "normal",
                    textureLayers: {
                        normal: {
                            defaultTextureURL: BASE_URL + "touch_l_button_y.fbx/touch_l_button_y.fbm/L_controller_DIF.jpg",
                        },
                        highlight: {
                            defaultTextureURL: BASE_URL + "touch_l_button_y.fbx/touch_l_button_y.fbm/L_controller-highlight_DIF.jpg",
                        }
                    }
                },
            }
        }
    ]
};

TOUCH_CONTROLLER_CONFIGURATION_RIGHT = {
    name: "Touch",
    controllers: [
        {
            modelURL: BASE_URL + "touch_r_body.fbx",
            jointIndex: MyAvatar.getJointIndex("_CONTROLLER_RIGHTHAND"),
            naturalPosition: { x: -0.016486231237649918, y: -0.03551865369081497, z: -0.018527653068304062 },
            dimensions: { x: 0.11053784191608429, y: 0.09957750141620636, z: 0.10139875113964081 },
            rotation: rightBaseRotation,
            position: rightBasePosition,

            parts: {
                tips: {
                    type: "static",
                    modelURL: BASE_URL + "Oculus-Labels-R.fbx",
                    naturalPosition: { x: 0.009739525616168976, y: -0.0017818436026573181, z: 0.016794726252555847 },
                    naturalDimensions: { x: 0.129049, y: 0.078297, z: 0.139492 },

                    textureName: "blank",
                    defaultTextureLayer: "blank",
                    textureLayers: {
                        blank: {
                            defaultTextureURL: BASE_URL + "Oculus-Labels-R.fbx/Oculus-Labels-R.fbm/Blank.png"
                        },
                        trigger: {
                            defaultTextureURL: BASE_URL + "Oculus-Labels-R.fbx/Oculus-Labels-R.fbm/Trigger.png"
                        },
                        arrows: {
                            defaultTextureURL: BASE_URL + "Oculus-Labels-R.fbx/Oculus-Labels-R.fbm/Rotate.png"
                        },
                        grip: {
                            defaultTextureURL: BASE_URL + "Oculus-Labels-R.fbx/Oculus-Labels-R.fbm/Grip-oculus.png"
                        },
                        teleport: {
                            defaultTextureURL: BASE_URL + "Oculus-Labels-R.fbx/Oculus-Labels-R.fbm/Teleport.png"
                        },
                        both_triggers: {
                            defaultTextureURL: BASE_URL + "Oculus-Labels-R.fbx/Oculus-Labels-R.fbm/Grip-Trigger.png"
                        },
                    }
                },

                trigger: {
                    type: "rotational",
                    modelURL: BASE_URL + "touch_r_trigger.fbx",
                    naturalPosition: { x: -0.0008544912561774254, y: -0.019867943599820137, z: 0.018800459802150726 },
                    naturalDimensions: { x: 0.027384, y: 0.025201, z: 0.018425 },

                    // rotational 
                    input: "OculusTouch.RT",
                    origin: { x: 0, y: -0.015, z: 0 },
                    minValue: 0.0,
                    maxValue: 1.0,
                    axis: { x: 1, y: 0, z: 0 },
                    maxAngle: 17,

                    textureName: "tex-highlight",
                    defaultTextureLayer: "normal",
                    textureLayers: {
                        normal: {
                            defaultTextureURL: BASE_URL + "touch_r_trigger.fbx/touch_r_trigger.fbm/R_controller_DIF.jpg",
                        },
                        highlight: {
                            defaultTextureURL: BASE_URL + "touch_r_trigger.fbx/touch_r_trigger.fbm/R_controller-highlight_DIF.jpg",
                        }
                    }
                },

                grip: {
                    type: "linear",
                    modelURL: BASE_URL + "touch_r_bumper.fbx",
                    naturalPosition: { x: -0.0000806618481874466, y: -0.027157839387655258, z: -0.024485092610120773 },
                    naturalDimensions: { x: 0.017268, y: 0.020366, z: 0.02599 },

                    // linear properties
                    // Offset from origin = 0.36470, 0.11048, 0.11066
                    input: "OculusTouch.RightGrip",
                    axis: { x: -1, y: 0.302933918, z: 0.302933918 },
                    maxTranslation: 0.003967,


                    textureName: "tex-highlight",
                    defaultTextureLayer: "normal",
                    textureLayers: {
                        normal: {
                            defaultTextureURL: BASE_URL + "touch_r_bumper.fbx/touch_r_bumper.fbm/R_controller_DIF.jpg",
                        },
                        highlight: {
                            defaultTextureURL: BASE_URL + "touch_r_bumper.fbx/touch_r_bumper.fbm/R_controller-highlight_DIF.jpg",
                        }
                    }
                },

                joystick: {
                    type: "joystick",
                    modelURL: BASE_URL + "touch_r_joystick.fbx",
                    naturalPosition: { x: -0.007561382371932268, y: -0.008225853554904461, z: 0.00479268841445446 },
                    naturalDimensions: { x: 0.027272, y: 0.033254, z: 0.027272 },

                    // joystick
                    xInput: "OculusTouch.RX",
                    yInput: "OculusTouch.RY",
                    originOffset: { x: 0, y: -0.0028564, z: 0 },
                    xHalfAngle: 20,
                    yHalfAngle: 20,

                    textureName: "tex-highlight",
                    defaultTextureLayer: "normal",
                    textureLayers: {
                        normal: {
                            defaultTextureURL: BASE_URL + "touch_r_joystick.fbx/touch_r_joystick.fbm/R_controller_DIF.jpg",
                        },
                        highlight: {
                            defaultTextureURL: BASE_URL + "touch_r_joystick.fbx/touch_r_joystick.fbm/R_controller-highlight_DIF.jpg",
                        }
                    }
                },

                button_a: {
                    type: "linear",
                    modelURL: BASE_URL + "touch_r_button_a.fbx",
                    naturalPosition: { x: 0.009307296946644783, y: -0.00005015172064304352, z: -0.012594504281878471 },
                    naturalDimensions: { x: 0.00982, y: 0.004345, z: 0.00982 },

                    input: "OculusTouch.A",
                    axis: { x: 0, y: -1, z: 0 },
                    maxTranslation: 0.001,

                    textureName: "tex-highlight",
                    defaultTextureLayer: "normal",
                    textureLayers: {
                        normal: {
                            defaultTextureURL: BASE_URL + "touch_r_button_a.fbx/touch_r_button_a.fbm/R_controller_DIF.jpg",
                        },
                        highlight: {
                            defaultTextureURL: BASE_URL + "touch_r_button_a.fbx/touch_r_button_a.fbm/R_controller-highlight_DIF.jpg",
                        }
                    }
                },

                button_b: {
                    type: "linear",
                    modelURL: BASE_URL + "touch_r_button_b.fbx",
                    naturalPosition: { x: 0.01616847701370716, y: -0.000050364527851343155, z: 0.0017703361809253693 },
                    naturalDimensions: { x: 0.009972, y: 0.004412, z: 0.009972 },

                    input: "OculusTouch.B",
                    axis: { x: 0, y: -1, z: 0 },
                    maxTranslation: 0.001,

                    textureName: "tex-highlight",
                    defaultTextureLayer: "normal",
                    textureLayers: {
                        normal: {
                            defaultTextureURL: BASE_URL + "touch_r_button_b.fbx/touch_r_button_b.fbm/R_controller_DIF.jpg",
                        },
                        highlight: {
                            defaultTextureURL: BASE_URL + "touch_r_button_b.fbx/touch_r_button_b.fbm/R_controller-highlight_DIF.jpg",
                        }
                    }
                },
            }
        }
    ]
};