function ImportacaoFerramentaViewModel(data) {
    var mSelf = this;

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

    mSelf.FerramentaId = data.FerramentaId;

    mSelf.Template = data.Template;

    mSelf.Nome = data.Nome;

    mSelf.Titulo = data.Titulo;

    mSelf.Ordem = 2;

    mSelf.Icone = data.Icone;

    mSelf.Visivel = ko.observable(true);

    mSelf.ModuloGrid = null;

    mSelf.Destroy = function () {
    };

    mSelf.Init = function () {
    };
}

function ImportacaoData(data) {
    var mSelf = this;

    mSelf.Data = data;

    mSelf.ListaEntidades = vm.Perspectiva.ListaEntidades;

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

    mSelf.UrlArquivo = ko.observable();

    mSelf.Entidade = ko.observable();

    mSelf.SelecionaEntidade = function (entidade) {
        mSelf.EntidadeSelecionada(entidade.Descricao());
        mSelf.Entidade(entidade);
    };

    mSelf.Importar = function () {
        if (mSelf.Entidade() == undefined || mSelf.Entidade() == null || mSelf.Entidade().Codigo() <= 0) {
            vm.ShowMensagemAlerta("Selecione uma entidade");
            return;
        }

        if (mSelf.csvFile() == undefined || mSelf.csvFile() == null || mSelf.csvFile().name == "") {
            vm.ShowMensagemAlerta("Selecione um arquivo CSV para importação");
            return;
        }

        var base = base64ArrayBuffer(mSelf.csvBinary());
        var params = {
            'CodigoEntidade': mSelf.Entidade().Codigo(),
            'arquivo': base
        };

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

        $.ajax({
            url: urlGlobal + "CadastroFormas/CadastroFormas/ImportarArquivo",
            contentType: 'application/json; charset=utf-8',
            dataType: "json",
            type: "POST",
            data: JSON.stringify(params),
            success: function (data) {
                if (data && data.Sucesso) {
                    abrirDialogModal(null, "Importar Arquivo", "Formas importadas com sucesso.");

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

                    mSelf.csvBinary(null);
                    mSelf.csvObjectURL(null);
                    mSelf.csvFile(null);

                    $('#file-import').attr({ value: '' });
                } else {
                    abrirDialogModal({
                        resizable: false,
                        width: 400,
                        height: 300,
                        modal: true,
                        buttons: {
                            "Fechar": function () {
                                $(this).dialog("close");
                                $(".loading-inlog").fadeOut();
                            }
                        }
                    }, "Importar Arquivo", "Erro ao importar arquivo: " + data.MensagemErro);
                }
            },
            complete: function () {
            }
        });
    };

    mSelf.csvFile = ko.observable();
    mSelf.csvObjectURL = ko.observable();
    mSelf.csvBinary = ko.observable();

    mSelf.GetCsvBytes = ko.computed(function () {
        if (mSelf.csvBinary()) {
            var buf = new Uint8Array(mSelf.csvBinary());
            return buf;
        } else {
            return '';
        }
    }, mSelf);
};