var afterZeraFormulario = function () {   
}
function FerramentaNovoFiltroDetalhesViewModel(filtro, grid) {
    var mSelf = this;

    mSelf.FiltroInlog = null;

    mSelf.Functions = null;

    mSelf.Visivel = ko.observable(true);
    mSelf.FerramentaId = ko.observable("FiltroDetalhes");
    mSelf.Icone = ko.observable(urlGlobal + "Content/Veiculos/img/icons/icon_02.png");
    mSelf.Nome = ko.observable("Filtro");
    mSelf.Titulo = ko.observable("Filtro");
    mSelf.Template = ko.observable("template-filtro-detalhes");
    mSelf.Ordem = ko.observable(1);
    mSelf.Data = null;

    mSelf.ItemFiltro = ko.observable({
        CodigoVeiculo: vm.Perspectiva.VeiculoId,
        TiposAlarmesSelecionados: ko.observable(null),
        Data: ko.observable(null),
        OrdenacaoData: ko.observable(null),
        StatusAlarmeFiltro: grid.StatusAlarmeFiltro,
        CodigoOperacao: ko.observable(null),
        timezoneSelecionadoInicial: ko.observable(null)
    });

    mSelf.Init = function () {
        mSelf.Functions = new FiltroInlogOverrideFuncions();
        mSelf.Functions.Filtrar = mSelf.Filtrar;
        mSelf.Functions.Limpar = mSelf.Limpar;

        filtro["Data"].DataItemPersonalizado = ItemFitroData;
        afterZeraFormulario = function () {
            timezone= getCurrentTimezone();
            $("#selectGMT").val(timezone);    
            ItemFitroData.timezoneSelecionadoInicial = ko.observable(timezone);
        }
        mSelf.FiltroInlog = new FiltroInlog(filtro, "filtroAlarmes", null, mSelf.Functions);

        mSelf.FiltroInlog.Init();

        mSelf.Data = mSelf.FiltroInlog;

        vm.Ferramentas.push(mSelf);

        vm.Perspectiva.ReconfigurarFerramentas();
        mSelf.FiltroInlog.RegistrarFiltroDDS();
    };

    mSelf.Limpar = function () {
        mSelf.ItemFiltro().TiposAlarmesSelecionados(null);
        mSelf.ItemFiltro().Data(null);
        mSelf.ItemFiltro().OrdenacaoData(null);

        mSelf.CarregarFiltro();
    };

    mSelf.Filtrar = function () {
        var lstColunaSelecao = mSelf.FiltroInlog.RecuperaFiltrosSelecionados();

        if (lstColunaSelecao.length == 0) {
            vm.ShowMensagemAlerta("Não há resultados para a pesquisa solicitada!");
            $(".loading-inlog").fadeOut();
            return;
        }

        ko.utils.arrayForEach(lstColunaSelecao, function (campoLista) {
            switch (campoLista) {
                case "Alarmes":
                    var tiposSelecionados = ko.utils.arrayFilter(mSelf.FiltroInlog.Itens[campoLista].ListaItensFiltro(), function (item) {
                        return item.Selecionado() === true;
                    });

                    var alarmes = [];
                    ko.utils.arrayForEach(tiposSelecionados, function (item) {
                        var alarme = ko.utils.arrayFirst(mSelf.FiltroInlog.Itens[campoLista].Data(), function (data) {
                            return data.Name() === item.Item;
                        });

                        if (alarme)
                            alarmes.push(alarme.Value());
                    });

                    mSelf.ItemFiltro().TiposAlarmesSelecionados(alarmes);
                    break;
                case "Data":
                    mSelf.ItemFiltro().timezoneSelecionadoInicial(mSelf.FiltroInlog.Itens[campoLista].timezoneSelecionadoInicial());
                    mSelf.ItemFiltro().Data(mSelf.FiltroInlog.Itens[campoLista].Data() + "T" + mSelf.FiltroInlog.Itens[campoLista].Hora());
                    mSelf.ItemFiltro().OrdenacaoData(mSelf.FiltroInlog.Itens[campoLista].DataHoraCheck() === "Maior");
                default:
                    break;
            }
        });
        mSelf.ItemFiltro().CodigoOperacao(vm.Perspectiva.Veiculo.CodigoOperacao());
        mSelf.ItemFiltro().StatusAlarmeFiltro(grid.StatusAlarmeFiltro());
        if (UsarGMTOperacao) {
            var timezoneInicial = mSelf.ItemFiltro().timezoneSelecionadoInicial();
            //mSelf.ItemFiltro().Data(new Date(mSelf.ItemFiltro().Data()).toISOTimeZoneString(timezoneInicial));
        }
        mSelf.CarregarFiltro();
    }

    mSelf.CarregarFiltro = function () {
        $.ajax({
            url: "VeiculoDetalhes/FiltrarAlarmes",
            data: ko.toJSON(mSelf.ItemFiltro()),
            contentType: 'application/json; charset=utf-8',
            dataType: "json",
            type: "POST",
            success: function (retorno) {
                if (retorno) {
                    var moduloGridDetalhes = vm.GetModulo("GridVeiculoDetalhesViewModel");

                    if (moduloGridDetalhes) {
                        if (moduloGridDetalhes.StatusAlarmeFiltro() == "P") {
                            var pend = ko.mapping.fromJS(retorno.Pendentes);
                            moduloGridDetalhes.Data.Pendentes(pend());

                            moduloGridDetalhes.PendentesIndex(0);
                            moduloGridDetalhes.ValidosIndex(-1);
                            moduloGridDetalhes.InvalidosIndex(-1);
                        }
                        else if (moduloGridDetalhes.StatusAlarmeFiltro() == "F") {
                            var val = ko.mapping.fromJS(retorno.Validos);
                            moduloGridDetalhes.Data.Validos(val());

                            moduloGridDetalhes.PendentesIndex(-1);
                            moduloGridDetalhes.ValidosIndex(0);
                            moduloGridDetalhes.InvalidosIndex(-1);
                        }
                        else {
                            var inv = ko.mapping.fromJS(retorno.Invalidos);
                            moduloGridDetalhes.Data.Invalidos(inv());

                            moduloGridDetalhes.PendentesIndex(-1);
                            moduloGridDetalhes.ValidosIndex(-1);
                            moduloGridDetalhes.InvalidosIndex(0);
                        }

                        vm.Perspectiva.alinharGrid();
                    }
                }
            },
            complete: function () {
                var moduloGridDetalhes = vm.GetModulo("GridVeiculoDetalhesViewModel");

                moduloGridDetalhes.Data.HabilitarBotao(true);
                moduloGridDetalhes.MultiTratamento(false);
                moduloGridDetalhes.MultiTratamentoChecked(false);

                //Limpa o filtro
                //mSelf.FiltroInlog.CarregarItensFiltro(true);

                //Fecha o filtro
                $(".menu_bloco").fadeOut();
                $('.icone').removeClass('active');

                $(".loading-inlog").hide();

                //mSelf.AtualizarTamanhoMapa();
            }
        }).done(function () {
            $(".grid-wrap").scrollTop(0);
        });
    }

    mSelf.Init();
}

function ItemFitroData() {
    var mSelf = this;

    mSelf.Data = ko.observable();
    mSelf.Hora = ko.observable("00:00");
    mSelf.DataHoraCheck = ko.observable("Maior");

    //Evento Obrigatório de limpar
    mSelf.EventoLimpar = function () {
        mSelf.Data("");
        mSelf.Hora("00:00");
    };
    mSelf.timezoneOptions = ko.observableArray(timezoneOptions);
    mSelf.timezoneSelecionadoInicial = ko.observable(getCurrentTimezone());

    return mSelf;
}
