"use strict";
/* jslint vars: true, plusplus: true, forin: true*/
/* globals Tablet, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, Controller, print, getControllerWorldLocation */
/* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */
//
// audioMuteOverlay.js
//
// client script that creates an overlay to provide mute feedback
//
// Created by Triplelexx on 17/03/09
// Copyright 2017 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//

(function() { // BEGIN LOCAL_SCOPE
    var utilsPath = Script.resolvePath('../developer/libraries/utils.js');
    Script.include(utilsPath);

    var TWEEN_SPEED = 0.025;
    var MIX_AMOUNT = 0.25;

    var overlayPosition = Vec3.ZERO;
    var tweenPosition = 0;
    var startColor = {
        red: 170,
        green: 170,
        blue: 170
    };
    var endColor = {
        red: 255,
        green: 0,
        blue: 0
    };
    var overlayID;

    Script.update.connect(update);
    Script.scriptEnding.connect(cleanup);

    function update(dt) {
        if (!Audio.muted) {
            if (hasOverlay()) {
                deleteOverlay();
            }
        } else if (!hasOverlay()) {
            createOverlay();
        } else {
            updateOverlay();
        }
    }

    function getOffsetPosition() {
        return Vec3.sum(Camera.position, Quat.getFront(Camera.orientation));
    }

    function createOverlay() {
        overlayPosition = getOffsetPosition();
        overlayID = Overlays.addOverlay("sphere", {
            position: overlayPosition,
            rotation: Camera.orientation,
            alpha: 0.9,
            dimensions: 0.1,
            solid: true,
            ignoreRayIntersection: true
        });
    }

    function hasOverlay() {
       return Overlays.getProperty(overlayID, "position") !== undefined;
    }

    function updateOverlay() {
        // increase by TWEEN_SPEED until completion
        if (tweenPosition < 1) {
            tweenPosition += TWEEN_SPEED;
        } else {
            // after tween completion reset to zero and flip values to ping pong 
            tweenPosition = 0;
            for (var component in startColor) {
                var storedColor = startColor[component];
                startColor[component] = endColor[component];
                endColor[component] = storedColor;
            }
        }
        // mix previous position with new and mix colors
        overlayPosition = Vec3.mix(overlayPosition, getOffsetPosition(), MIX_AMOUNT);
        Overlays.editOverlay(overlayID, {
            color: colorMix(startColor, endColor, easeIn(tweenPosition)),
            position: overlayPosition,
            rotation: Camera.orientation
        });
    }

    function deleteOverlay() {
        Overlays.deleteOverlay(overlayID);
    }

    function cleanup() {
        deleteOverlay();
        Audio.muted.disconnect(onMuteToggled);
        Script.update.disconnect(update);
    }
}()); // END LOCAL_SCOPE