(function () {
    'use strict';

    angular
        .module('app')
            .service('GlobalVariable', GlobalVariable);

    GlobalVariable.$inject = ['$location'];

    function GlobalVariable($location) {

        var painelFinal = "PAINEL_FINAL";
        var objetoDispositivo = "OBJ_DISPOSITIVO";
        var _token = "TK_USUARIO";
        var painelNaoInstalado = urlGlobal + "Terminais/Instalador/";
        var imagens = [];

        this.getPainelFinal = getPainelFinal;
        this.getTipo = GetTipo;
        this.getDispositivo = getDispositivo;
        this.LimparLocalStorage = LimparLocalStorage;
        this.setObjetoDisposivo = setObjetoDisposivo;
        this.getObjetoDisposivo = getObjetoDisposivo;
        this.getDispositivoInstalado = getDispositivoInstalado;
        this.GetParametroP = GetParametroP;
        this.token = getRandomToken;
        this.LocalSotrageIsNullOrEmptyFinal = LocalSotrageIsNullOrEmptyFinal;
        this.SetImagemVeiculoNavegador = SetImagemVeiculoNavegador;
        this.GetImagemVeiculoNavegador = GetImagemVeiculoNavegador;
        this.SetContoleRefresh = SetContoleRefresh;
        this.GetContoleRefresh = GetContoleRefresh;

        function getPainelFinal(Consulta, callBack) {
            return GetCodigoPainel(Consulta, callBack);
        }

        function getDispositivoInstalado() {
            if (localStorage[painelFinal])
                return localStorage[painelFinal].split(';')[1];
            return 0;
        }

        function LimparLocalStorage() {
            localStorage[painelFinal] = "";
        }

        function GetTipo() {
            var queryString = $location.search();
            if (queryString.CodigoPainel && !queryString.p) {
                return queryString.Tipo;
            }
            return "";
        }

        function GetParametroP() {
            var queryString = $location.search();
            if (queryString.p) {
                return queryString.p;
            }
            return "";
        }

        function getDispositivo() {
            var queryString = $location.search();
            if (queryString.CodigoPainel && !queryString.p) {
                return queryString.CodigoDispositivo;
            }
            return "";
        }

        function setObjetoDisposivo(objDispositivo) {
            localStorage[objetoDispositivo] = JSON.stringify(objDispositivo);
        }

        function getObjetoDisposivo() {
            if (localStorage[objetoDispositivo])
                return JSON.parse(localStorage[objetoDispositivo]);
            return null;
        }

        function setPainelFinal(chave) {
            localStorage[painelFinal] = chave;
        }

        function LocalSotrageIsNullOrEmptyFinal() {
            var queryString = $location.search();
            return GetTipo() == "" && (localStorage[painelFinal] == null || localStorage[painelFinal] == "");
        }

        function GetCodigoPainel(Consulta, callBack) {
            var codigoPainel;
            var tipo;
            var queryString = $location.search();

            if (queryString.CodigoPainel && !queryString.p) {
                tipo = queryString.Tipo;
                codigoPainel = queryString.CodigoPainel;
            } else {
                var chave = ValidaInstalacao(queryString, Consulta, callBack);
                codigoPainel = chave.split(";")[0];
            }
            return codigoPainel;
        }

        function getRandomToken() {
            if (localStorage[_token])
                return localStorage[_token];
            // E.g. 8 * 32 = 256 bits token
            var randomPool = new Uint8Array(32);
            crypto.getRandomValues(randomPool);
            var hex = '';
            for (var i = 0; i < randomPool.length; ++i) {
                hex += randomPool[i].toString(16);
            }
            localStorage[_token] = hex;
            // E.g. db18458e2782b2b77e36769c569e263a53885a9944dd0a861e5064eac16f1a
            return localStorage[_token];
        }

        function ValidaInstalacao(queryString, Consulta, callBack) {
            var chave = null;
            if (key) {
                setPainelFinal(key);
                chave = key;
            } else {
                if (!(queryString.CodigoPainel && !queryString.p)) {
                    if (localStorage[painelFinal]) {
                        chave = localStorage[painelFinal].split(";")[0];
                        if (Consulta) {
                            Consulta.ConsultaPainelPorCodigo(chave, function (data) {
                                if (data.data.Data && data.data.Data != null) {
                                    if (callBack) {
                                        callBack(data.data.Data.Status);
                                    } else {

                                        var status = data.data.Data.Status;
                                        if (status === 0) {
                                            ExibirErro("Esse painel foi desativado!");
                                            return "";
                                        }
                                        //location.href = painelNaoInstalado;
                                    }
                                } else {
                                    if (callBack) {
                                        callBack(0);
                                    }
                                }
                            }, function () {
                                debugger;
                            });
                        }
                    } else {
                        if (callBack)
                            callBack(0);
                        else {
                            //location.href = painelNaoInstalado;
                            //$('.loading-div').fadeOut();
                            PermanceExibirErro("Esse painel foi desativado!");
                            //$scope.SignalR = null;
                            return "";
                        }
                    }
                }
            }
            return chave;
        }

        function SetImagemVeiculoNavegador(image) {
            sessionStorage[image.id] = image.src;
        }

        function GetImagemVeiculoNavegador(id) {
            if (sessionStorage[id])
                return sessionStorage[id];
            return null;
        }

        function SetContoleRefresh(id, value) {
            localStorage[id] = value;
        }

        function GetContoleRefresh(id) {
            if (localStorage[id])
                return localStorage[id];
            return false;
        }
    }
})();