function AdicionarFormaFerramentaViewModel(data) {
    var mSelf = this;

    mSelf.Data = ko.observable(new ConfiguracoesAdicionar(data.Data));

    mSelf.FerramentaId = data.FerramentaId;

    mSelf.Template = data.Template;

    mSelf.Nome = data.Nome;

    mSelf.Titulo = data.Titulo;

    mSelf.Ordem = 4;

    mSelf.Icone = data.Icone;

    mSelf.Visivel = ko.observable(true);

    mSelf.ModuloGrid = null;

    mSelf.Destroy = function () {

    };

    mSelf.Init = function () {
        $("#campoBusca").blur(function (evt) {
            if (evt.relatedTarget == null || evt.relatedTarget.type != "button")
                mSelf.Data().BuscarEntidades();
        });
    };

}

function ConfiguracoesAdicionar(data) {
    var mSelf = this;

    mSelf.Data = data;

    mSelf.ListaTiposEntidades = ko.observableArray(vm.Perspectiva.ListaEntidades());

    mSelf.CampoDescricao = ko.observable();

    mSelf.ListaEntidades = ko.observable();

    mSelf.DescricaoTipoEntidade = ko.observable("Tipo de entidade");

    mSelf.TipoEntidadeSelecionado = ko.observable();

    mSelf.MensagemRetorno = ko.observable();

    mSelf.EntidadeSelecionada = ko.observable();

    mSelf.DescricaoEntidade = ko.observable();

    mSelf.IdentificadorEntidade = ko.observable();

    mSelf.SelecionaTipoEntidade = function (entidade) {
        mSelf.DescricaoTipoEntidade(entidade.Descricao());
        mSelf.TipoEntidadeSelecionado(entidade.Codigo());
    };

    mSelf.MensagemErro = ko.observable();

    mSelf.BuscarEntidades = function () {
        if (mSelf.ValidaCampos(false)) {

            var param = {
                'descricao': mSelf.CampoDescricao() != null ? mSelf.CampoDescricao().toUpperCase() : "'",
                'codigoTipoEntidade': mSelf.TipoEntidadeSelecionado()
            };

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

            mSelf.MensagemRetorno("");

            $.ajax({
                url: urlGlobal + "GestaoFormas/ConsultarEntidades",
                contentType: 'application/json; charset=utf-8',
                dataType: "json",
                type: "GET",
                data: param,
                success: function (data) {
                    if (data != null && data.length > 0) {

                        mSelf.ListaEntidades(ko.mapping.fromJS(data));
                    } else {
                        mSelf.ListaEntidades([]);

                        mSelf.MensagemRetorno("Nenhuma entidade encontrada.");

                        mSelf.EntidadeSelecionada(null);
                    }
                },
                complete: function () {
                    $(".loading-inlog").fadeOut();
                }
            });
        } else {
            abrirDialogModal(null, "Buscar formas", mSelf.MensagemErro());
        }
    };

    mSelf.SalvarForma = function () {

        if (mSelf.ValidaCampos(true)) {

            var forma = {
                'Identificador': mSelf.IdentificadorEntidade().toUpperCase(),
                'Descricao': mSelf.DescricaoEntidade().toUpperCase(),
                'CodigoGrupoEntidade': mSelf.EntidadeSelecionada()
            }

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

            $.ajax({
                url: urlGlobal + "GestaoFormas/CriarForma",
                contentType: 'application/json; charset=utf-8',
                dataType: "json",
                type: "POST",
                data: JSON.stringify(forma),
                success: function (data) {
                    if (data && data.Sucesso) {
                      
                        mSelf.CampoDescricao("");
                        mSelf.DescricaoTipoEntidade("Tipo de entidade");
                        mSelf.ListaEntidades([]);

                        //atualizar grid de formas
                        var ferramenta = vm.GetFerramenta("FerramentaFiltro");
                        if (ferramenta) {
                            ferramenta.Data().Filtrar();
                        }

                        abrirDialogModal(null, "Salvar forma", "Forma gravada com sucesso.");

                    } else {
                        abrirDialogModal(null, "Salvar forma", data.MensagemSucesso);
                    }
                },
                complete: function () {
                    $(".loading-inlog").fadeOut();
                }
            });
        } else {
            abrirDialogModal(null, "Salvar forma", mSelf.MensagemErro());
        }
    };

    mSelf.ValidaCampos = function (validarEntidade) {
        if (validarEntidade) {
            if (mSelf.IdentificadorEntidade() == "" || mSelf.IdentificadorEntidade() == undefined) {
                mSelf.MensagemErro("Nenhuma entidade selecionada.");
                return false;
            }
        }

        mSelf.MensagemErro("");
        if (mSelf.TipoEntidadeSelecionado() == null) {
            mSelf.MensagemErro("Selecione o tipo de entidade.");
            return false;
        }

        if (mSelf.CampoDescricao() == null || mSelf.CampoDescricao().trim() == "") {
            mSelf.MensagemErro("Informe a descrição ou identificador.");
            return false;
        }
        
        return true;
    }

    mSelf.SelecionaEntidade = function (entidade) {
        mSelf.EntidadeSelecionada(entidade.CodigoGrupoEntidade());
        mSelf.DescricaoEntidade(entidade.Descricao());
        mSelf.IdentificadorEntidade(entidade.Identificador());
    }

    mSelf.LimparCampos = function () {
        mSelf.CampoDescricao("");
        mSelf.ListaEntidades([]);
        mSelf.MensagemRetorno("");
        mSelf.EntidadeSelecionada(null);
        mSelf.DescricaoEntidade("");
        mSelf.IdentificadorEntidade("");

        mSelf.DescricaoTipoEntidade("Tipo de entidade");
    };
};