(function () {
    'use strict';

    angular
        .module('editorRotas')
        .factory('ferramentaInicioFimColeta', ferramentaInicioFimColeta);

    ferramentaInicioFimColeta.$inject = ['$location', 'FuncionalidadesMapa'];

    function ferramentaInicioFimColeta($location, FuncionalidadesMapa) {
        var _codigoSetor = 0;
        var _codigoRota = 0;
        var queryString = $location.search();
        var habilitado = false;
        var _Scope = null;
        var _element = null;

        if (queryString) {
            _codigoSetor = queryString.CodigoSetor;
            _codigoRota = queryString.CodigoRota;
        }

        function Init() {
            var rota = FuncionalidadesMapa.GetRota(_codigoRota);
            if (rota.getPath().length) {
                google.maps.event.clearListeners(rota.getPath(), 'set_at');
                google.maps.event.addListener(rota.getPath(), 'set_at', updateMarker);
                google.maps.event.clearListeners(rota.getPath(), 'insert_at');
                google.maps.event.addListener(rota.getPath(), 'insert_at', updateMarker);
                FuncionalidadesMapa.SetPositionMarkerFim(_codigoRota, FuncionalidadesMapa.GetFimRota(_codigoRota));
                FuncionalidadesMapa.SetPositionMarkerInicio(_codigoRota, FuncionalidadesMapa.GetInicioRota(_codigoRota));
            }
        }

        function updateMarker() {
            FuncionalidadesMapa.SetPositionMarkerFim(_codigoRota, FuncionalidadesMapa.GetFimRota(_codigoRota));
            FuncionalidadesMapa.SetPositionMarkerInicio(_codigoRota, FuncionalidadesMapa.GetInicioRota(_codigoRota));

            Init();
        }

        function SetCodigoSetorRota(codigoSetor, codigoRota) {
            _codigoSetor = codigoSetor;
            _codigoRota = codigoRota;
        }

        function SetCenterInicioFim(inicio) {
            _Scope.SetInicioFim(inicio);
            if (inicio) FuncionalidadesMapa.SetCenterMarkerInicio();
            else FuncionalidadesMapa.SetCenterMarkerFim();
        }

        function Habilita() {
            habilitado = true;
            _Scope.HabilitarInicioFim(true);
        }

        function Desabilita() {
            habilitado = false;
            _Scope.HabilitarInicioFim(false);
        }

        function SetScope(scope, element) {
            _Scope = scope;
            _element = element;
        }

        return {
            Init: Init,
            SetCodigoSetorRota: SetCodigoSetorRota,
            Habilita: Habilita,
            Desabilita: Desabilita,
            IsHabilitado: () => { return habilitado; },
            SetScope: SetScope,
            SetCenterInicioFim: SetCenterInicioFim,
            disableElement: () => _element.addClass('disabled'),
            enableElement: () => _element.removeClass('disabled'),
            updateMarker: updateMarker
        };
    }
})();