(function () {
    'use strict';

    angular
        .module('mdUtils')
        .factory('calculoDistancia', calculoDistancia);

    function calculoDistancia() {
        /**
         * Calcula a distancia de todos os pontos da polyline
         * @param {*} polyline 
         */
        function calcularDistanciaPonto(polyline) {
            polyline.getPath().getArray().forEach(ponto => calculoDistancia(ponto, polyline));
        }

        /**
         * Calcula a distancia de um ponto da polyline
         * @param {*} ponto 
         * @param {*} polyline 
         */
        function calculoDistancia(ponto, polyline) {
            let index = polyline.IndexPoint(ponto);
            let point = polyline.getPath().getAt(index);
            let pointAnterior = null, pointProximo = null;

            if (index > 0) pointAnterior = polyline.getPath().getAt(index - 1);
            if (index < polyline.getPath().length - 1) pointProximo = polyline.getPath().getAt(index + 1);
            if (pointAnterior && point) point.Distancia = point.Distance(pointAnterior);
            if (pointProximo && point) pointProximo.Distancia = pointProximo.Distance(point);
        }

        return {
            calcularDistanciaPonto: calcularDistanciaPonto
        };
    }
})();