"use strict";

// Created by Jason C. Najera on 3/7/2019
// Copyright 2019 High Fidelity, Inc.
//
// Handles Push-to-Talk functionality for HMD mode.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html

Script.include("/~/system/libraries/controllerDispatcherUtils.js");
Script.include("/~/system/libraries/controllers.js");

(function() { // BEGIN LOCAL_SCOPE
    function PushToTalkHandler() {
        var _this = this;
        this.active = false;

        this.shouldTalk = function (controllerData) {
            // Set up test against controllerData here...
            var gripVal = controllerData.secondaryValues[LEFT_HAND] && controllerData.secondaryValues[RIGHT_HAND];
            return (gripVal) ? true : false;
        };

        this.shouldStopTalking = function (controllerData) {
            var gripVal = controllerData.secondaryValues[LEFT_HAND] && controllerData.secondaryValues[RIGHT_HAND];
            return (gripVal) ? false : true;
        };

        this.isReady = function (controllerData, deltaTime) {
            if (HMD.active && Audio.pushToTalk && this.shouldTalk(controllerData)) {
                Audio.pushingToTalk = true;
                return makeRunningValues(true, [], []);
            }

            return makeRunningValues(false, [], []);
        };

        this.run = function (controllerData, deltaTime) {
            if (this.shouldStopTalking(controllerData) || !Audio.pushToTalk) {
                Audio.pushingToTalk = false;
                print("Stop pushing to talk.");
                return makeRunningValues(false, [], []);
            }

            return makeRunningValues(true, [], []);
        };

        this.parameters = makeDispatcherModuleParameters(
            950,
            ["head"],
            [],
            100);
    }

    var pushToTalk = new PushToTalkHandler();
    enableDispatcherModule("PushToTalk", pushToTalk);

    function cleanup() {
        disableDispatcherModule("PushToTalk");
    };

    Script.scriptEnding.connect(cleanup);
}()); // END LOCAL_SCOPE