(function () {
    'use strict';

    angular.module('app')
        .factory('ItinerariosFormatados', ItinerariosFormatados);

    ItinerariosFormatados.$inject = ['CompartilharScope'];

    function ItinerariosFormatados(CompartilharScope) {

        function formatar(originalObj, exibeObj) {
            var itinerariosFormatados = [];

            // Importa vars e funcs dos controllers
            var layoutColunas = CompartilharScope.getScope('ConfiguracaoColunasController').LayoutColunas;
            var visualizacao = CompartilharScope.getScope('ConfiguracaoVisualizacaoController').ConfiguracaoVisualizacao;
            var templatePainel = CompartilharScope.getScope('ConfiguracaoColunasController').TipoTemplate;
            var funcCalculaPrevisao = CompartilharScope.getScope('PainelFinalServiceController').CalculaPrevisao;
            var funcCorFundoPlataforma = CompartilharScope.getScope('PainelFinalServiceController').CarregarCorFundoPlataforma;
            var funcCorFontePlataforma = CompartilharScope.getScope('PainelFinalServiceController').CarregarCorFontePlataforma;

            for (var i = 0; i < originalObj.length; i++) {
                itinerariosFormatados[i] = [];
                var ChegadasPrevistas = [];
                for (var j = 0; j < originalObj[i].PrevisoesChegada.length; j++) {
                    ChegadasPrevistas[j] = {
                        "Previsao": funcCalculaPrevisao(originalObj[i].PrevisoesChegada[j]) || '00min',
                        "Icone": originalObj[i].PrevisoesChegada[j].Icone,
                        "RealTime": originalObj[i].PrevisoesChegada[j].RealTime,
                        "ExibeIconeRealTime": visualizacao.IconeTempoReal,
                        "IdentificadorVeiculo": originalObj[i].PrevisoesChegada[j].IdentificadorVeiculo,
                        "Cadeirante": originalObj[i].PrevisoesChegada[j].Cadeirante,
                        "TipoVeiculo": originalObj[i].PrevisoesChegada[j].TipoVeiculo
                    };
                }

                // Templates: Fretamento, Rodoviário e Urbano
                itinerariosFormatados[i].push(
                    {
                        "Coluna": 'DescricaoLinha',
                        "TituloColuna": exibeObj.Linha.Texto || 'Linha',
                        //"OrdemColuna": layoutColunas.DescricaoLinha.Ordem,
                        "OrdemColuna": layoutColunas.DescricaoLinha.Index,
                        "LarguraColuna": layoutColunas.DescricaoLinha.Largura,
                        "IdentificadorLinha": originalObj[i].IdentificadorLinha,
                        "Value": originalObj[i].DescricaoLinha,
                        "Exibicao": layoutColunas.DescricaoLinha.Visivel,
                        "Colspan": 1,
                        "Hidden": false
                    },
                    {
                        "Coluna": 'Plataforma',
                        //"TituloColuna": exibeObj.Plataforma.Texto || 'Plataforma',
                        "TituloColuna": '',
                        //"OrdemColuna": layoutColunas.Plataforma.Ordem,
                        "OrdemColuna": layoutColunas.Plataforma.Index,
                        "LarguraColuna": layoutColunas.Plataforma.Largura,
                        "CorFundoPlataforma": funcCorFundoPlataforma(originalObj[i].Plataforma),
                        "CorFontePlataforma": funcCorFontePlataforma(originalObj[i].Plataforma),
                        "Value": originalObj[i].Plataforma,
                        "Exibicao": layoutColunas.Plataforma.Visivel,
                        "Colspan": 1,
                        "Hidden": false
                    },
                    {
                        "Coluna": 'Veiculo',
                        "TituloColuna": exibeObj.Veiculo.Texto || 'Veiculo',
                        //"TituloColuna": '',
                        //"OrdemColuna": layoutColunas.Plataforma.Ordem,
                        "OrdemColuna": layoutColunas.Veiculo.Index,
                        "LarguraColuna": layoutColunas.Veiculo.Largura,
                        "Value": originalObj[i].Veiculo,
                        "TipoVeiculo": originalObj[i].TipoVeiculo,
                        "Icone": originalObj[i].Icone,
                        "Exibicao": layoutColunas.Veiculo.Visivel,
                        "Colspan": 1,
                        "Hidden": false
                    },
                    {
                        "Coluna": 'Origem',
                        "TituloColuna": exibeObj.Origem.Texto || 'Origem',
                        //"OrdemColuna": layoutColunas.Origem.Ordem,
                        "OrdemColuna": layoutColunas.Origem.Index,
                        "LarguraColuna": layoutColunas.Origem.Largura,
                        "Value": originalObj[i].Origem,
                        "Exibicao": layoutColunas.Origem.Visivel,
                        "Colspan": 1,
                        "Hidden": false
                    },
                    {
                        "Coluna": 'Destino',
                        "TituloColuna": exibeObj.Destino.Texto || 'Destino',
                        //"OrdemColuna": layoutColunas.Destino.Ordem,
                        "OrdemColuna": layoutColunas.Destino.Index,
                        "LarguraColuna": layoutColunas.Destino.Largura,
                        "Value": originalObj[i].Destino,
                        "Exibicao": layoutColunas.Destino.Visivel,
                        "Colspan": 1,
                        "Hidden": false
                    },
                    {
                        "Coluna": 'DescricaoProximoTerminal',
                        "TituloColuna": exibeObj.ProximoTerminal.Texto || 'Próximo Terminal',
                        //"OrdemColuna": layoutColunas.DescricaoProximoTerminal.Ordem,
                        "OrdemColuna": layoutColunas.DescricaoProximoTerminal.Index,
                        "LarguraColuna": layoutColunas.DescricaoProximoTerminal.Largura,
                        "Value": originalObj[i].DescricaoProximoTerminal,
                        "Exibicao": layoutColunas.DescricaoProximoTerminal.Visivel,
                        "Colspan": 1,
                        "Hidden": false
                    },
                    {
                        "Coluna": 'DistanciaTerminal',
                        "TituloColuna": exibeObj.Distancia.Texto || 'Distância',
                        //"OrdemColuna": layoutColunas.DistanciaTerminal.Ordem,
                        "OrdemColuna": layoutColunas.DistanciaTerminal.Index,
                        "LarguraColuna": layoutColunas.DistanciaTerminal.Largura,
                        "Value": formataKM(originalObj[i].DistanciaTerminal),
                        "Exibicao": layoutColunas.DistanciaTerminal.Visivel,
                        "Colspan": 1,
                        "Hidden": false
                    },
                    {
                        "Coluna": 'ChegadaPrevista',
                        "TituloColuna": (templatePainel == 'URBANO' ? '' : exibeObj.ChegadaPrevista[1].Texto || 'Chegada 01'),
                        //"OrdemColuna": layoutColunas.ChegadaPrevista.Ordem,
                        "OrdemColuna": layoutColunas.ChegadaPrevista.Index,
                        "LarguraColuna": layoutColunas.ChegadaPrevista.Largura,
                        "Value": ChegadasPrevistas[0],
                        "Exibicao": layoutColunas.ChegadaPrevista.Visivel,
                        "Colspan": 1,
                        "Hidden": (templatePainel == 'URBANO' ? true : false)
                    },
                    {
                        "Coluna": 'ChegadaPrevista2',
                        "TituloColuna": exibeObj.ChegadaPrevista[1].Texto || 'Chegada 02',
                        //"OrdemColuna": layoutColunas.ChegadaPrevista2.Ordem,
                        "OrdemColuna": layoutColunas.ChegadaPrevista2.Index,
                        "LarguraColuna": layoutColunas.ChegadaPrevista2.Largura,
                        "Value": ChegadasPrevistas[1],
                        "Exibicao": layoutColunas.ChegadaPrevista2.Visivel,
                        "Hidden": false,
                        "Colspan": 3
                    },
                    {
                        "Coluna": 'ChegadaPrevista3',
                        "TituloColuna": ''/*exibeObj.ChegadaPrevista[2].Texto || 'Chegada 03'*/,
                        //"OrdemColuna": layoutColunas.ChegadaPrevista3.Ordem,
                        "OrdemColuna": layoutColunas.ChegadaPrevista3.Index,
                        "LarguraColuna": layoutColunas.ChegadaPrevista3.Largura,
                        "Value": ChegadasPrevistas[2],
                        "Exibicao": layoutColunas.ChegadaPrevista3.Visivel,
                        "Colspan": 1,
                        "Hidden": true
                    }
                );
            }

            return itinerariosFormatados;
        }

        return {
            formatar: formatar
        };
    }

    function formataKM(value) {
        if (value) {
            if (parseInt(value) >= 1000) {
                var strValue = (value / 1000).toLocaleString();
                var splitTamanho = strValue.split(',');
                if (splitTamanho) {
                    if (splitTamanho.length == 1) strValue += ",000";
                    else if (splitTamanho[1].length == 1) strValue += "00";
                    else if (splitTamanho[1].length == 2) strValue += "0";
                }
                return strValue + " Km";
            } else
                return value.toLocaleString() + " m";
        }
        else
            return "";
    }
})();
