$('#tutorial').on('click', function () {
    $(document).ready(async function () {
        const driver = new Driver({
            doneBtnText: 'Sair',
            closeBtnText: 'Fechar',
            nextBtnText: 'Próximo',
            prevBtnText: 'Anterior',
            allowClose: false
        });
        driver.defineSteps([{
            element: '#btn-filtros',
            popover: {
                title: 'Botão Filtros',
                description: 'Clique nesse botão para filtrar sua consulta.',
                position: 'bottom'
            }
        },
        {
            element: '#btnInutilizar',
            popover: {
                title: 'Botão Inutilizar',
                description: 'Clique nesse botão para inutilizar uma nota fiscal.',
                position: 'bottom'
            }
        },
        {
            element: '#tabelaNotas_wrapper',
            popover: {
                title: 'Notas Fiscais',
                description: 'Aqui ficam as notas fiscais filtradas.',
                position: 'top'
            }
        },
        {
            element: '#dadosnota',
            popover: {
                title: 'Dados da Nota',
                description: 'Aqui ficam os dados da nota que está selecionada.',
                position: 'top'
            }
        },
        {
            element: '#btnGerar',
            popover: {
                title: 'Botão Gerar',
                description: 'Clique aqui para gerar a nota fiscal selecionada.',
                position: 'top'
            }
        },
        {
            element: '#btnImprimir',
            popover: {
                title: 'Botão Imprimir',
                description: 'Clique aqui para imprimir a nota fiscal selecionada.',
                position: 'top'
            }
        },
        {
            element: '#btnCancelar',
            popover: {
                title: 'Botão Cancelar',
                description: 'Clique aqui para cancelar a nota fiscal selecionada.',
                position: 'top'
            }
        },
        {
            element: '#btnExcluir',
            popover: {
                title: 'Botão Excluir',
                description: 'Clique aqui para excluir a nota fiscal selecionada.',
                position: 'top'
            }
        },
        {
            element: '#btnConsultar',
            popover: {
                title: 'Botão Consultar',
                description: 'Clique aqui para consultar a nota fiscal selecionada.',
                position: 'top'
            }
        }

        ]);
        driver.start();
        driver.getHighlightedElement();
    });
});


$(document).ready(async function () {
    const gerarVarios = localStorage.getItem('@nfce.permiteGerarMaisDeUmaNFCE') != null &&
        localStorage.getItem('@nfce.permiteGerarMaisDeUmaNFCE') != 'false';

    if (gerarVarios) {
        $('#checkPermiteGerarMaisDeUmaNFCE').prop('checked', true)
        $('#mostrarCheckTodos').removeClass('d-none')
            .addClass('d-inline');
    }

    await setarDataAtual('txtDataDe');
    await setarDataAtual('txtDataAte');
    const usaCertificadoA3 = await CopiaParametro("FATURAMENTO", 2);


    $('input[name=rg_status]:checked').on('change', function () {
        $('#btn-consultar').trigger('click');
    });
    $('input[name=rg_protocolo]:checked').on('change', function () {
        $('#btn-consultar').trigger('click');
    });

    $('#checkPermiteGerarMaisDeUmaNFCE').on('change', function () {
        const selecionado = $(this).prop('checked');
        localStorage.setItem('@nfce.permiteGerarMaisDeUmaNFCE', selecionado);
        window.location.reload();
    });

    $('#tabelaNotas').DataTable({
        paging: true,
        filter: true,
        info: false,
        order: false,
        destroy: true,
        key: true,
        "language": {
            "sEmptyTable": "Nenhum registro encontrado",
            "sInfo": "_TOTAL_ registros",
            "sInfoEmpty": " 0 registros",
            "sInfoFiltered": "(Filtrados de _MAX_ registros)",
            "sInfoPostFix": "",
            "sInfoThousands": ".",
            "sLengthMenu": "_MENU_ resultados",
            "sLoadingRecords": "Carregando...",
            "sProcessing": "Processando...",
            "sZeroRecords": "Nenhum registro encontrado",
            "sSearch": "Pesquisar",
            "oPaginate": {
                "sNext": "Próximo",
                "sPrevious": "Anterior",
                "sFirst": "Primeiro",
                "sLast": "Último"
            },
            "oAria": {
                "sSortAscending": ": Ordenar colunas de forma ascendente",
                "sSortDescending": ": Ordenar colunas de forma descendente"
            }
        }
    });

    $('#checkTodosItens').on('change', function () {
        $('.campoSel').prop('checked', $('#checkTodosItens').prop('checked'));
        if ($('#checkTodosItens').prop('checked')) {
            $('.campoSel').addClass('selecionado');
        } else {
            $('.campoSel').removeClass('selecionado');
        }
        $('.campoSel').trigger('change');
        $('#tabelaNotas tr').removeClass('selected');
        $('.campoSel').toArray().forEach(comp => {
            const linhaAtual = $(comp).closest('tr');
            if (!linhaAtual.hasClass('selected') && $('#checkTodosItens').prop('checked')) {
                linhaAtual.addClass('selected');
            } else {
                linhaAtual.removeClass('selected');
            }
        });
    });

    $('#tabelaItens').DataTable({
        paging: false,
        filter: false,
        info: false,
        order: false,
        destroy: true,
        autowidth: true,
        "language": {
            "sEmptyTable": "Nenhum registro encontrado",
            "sInfo": "_TOTAL_ registros",
            "sInfoEmpty": " 0 registros",
            "sInfoFiltered": "(Filtrados de _MAX_ registros)",
            "sInfoPostFix": "",
            "sInfoThousands": ".",
            "sLengthMenu": "_MENU_ resultados",
            "sLoadingRecords": "Carregando...",
            "sProcessing": "Processando...",
            "sZeroRecords": "Nenhum registro encontrado",
            "sSearch": "Pesquisar",
            "oPaginate": {
                "sNext": "Próximo",
                "sPrevious": "Anterior",
                "sFirst": "Primeiro",
                "sLast": "Último"
            },
            "oAria": {
                "sSortAscending": ": Ordenar colunas de forma ascendente",
                "sSortDescending": ": Ordenar colunas de forma descendente"
            }
        }
    });

    async function buscaNotas(iImpresso, iProtocolo, iTipoTransmissao) {
        let sDataIni = `'${$('#txtDataDe').val()}'`;
        let sDataFim = `'${$('#txtDataAte').val()}'`;
        const url = `/sisplan/funcoes/v1/pesquisa?`;
        let impresso = '';
        let protocolo = '';
        let tipoTransmissao = '';
        let sCodCli = pegaChave('#txtCliente');
        if (sCodCli != '') {
            sCodCli = ` and nota_nfce.codcli = '${sCodCli}'`;
        }
        let sFatura = pegaChave('#txtNota');
        if (sFatura != '') {
            sFatura = ` and nota_nfce.fatura = '${sFatura}'`;
        }
        switch (iImpresso) {
            case '1':
                {
                    impresso = 'S';
                    break;
                }
            case '2':
                {
                    impresso = 'N';
                    break;
                }
            case '3':
                {
                    impresso = 'C';
                    break;
                }
            case '4':
                {
                    impresso = 'D';
                    break;
                }
            default:
                impresso = '';
                break;
        }

        switch (iProtocolo) {
            case '1':
                {
                    protocolo = "and ((NOTA_NFCE.PROTOCOLO_NFCE IS NOT NULL) AND (NOTA_NFCE.PROTOCOLO_NFCE <> ''))";
                    break;
                }
            case '2':
                {
                    protocolo = "and ((NOTA_NFCE.PROTOCOLO_NFCE IS NULL) OR (NOTA_NFCE.PROTOCOLO_NFCE = ''))";
                    break;
                }
            default:
                protocolo = '';
                break;
        }

        switch (iTipoTransmissao) {
            case '1':
                {
                    tipoTransmissao = "and ((NOTA_NFCE.CHAVE_OFFLINE IS NULL) OR (NOTA_NFCE.CHAVE_OFFLINE = ''))";
                    break;
                }
            case '2':
                {
                    tipoTransmissao = "and ((NOTA_NFCE.CHAVE_OFFLINE IS NOT NULL) AND (NOTA_NFCE.CHAVE_OFFLINE <> ''))";
                    break;
                }
            default:
                tipoTransmissao = '';
                break;
        }

        try {
            if (impresso != '') {
                impresso = `and nota_nfce.impresso = '${impresso}'`;
            }
            let response = await requisicao('GET', url, `JSON={ "tabela":"nota_nfce", "camposSelect":[ "nota_nfce.fatura", "nota_nfce.serie", "nota_nfce.dt_emissao", "nota_nfce.codcli", "entidade.nome", "nota_nfce.valor", "nota_nfce.codven", "nota_nfce.chave_nfce", "nota_nfce.protocolo_nfce", "nota_nfce.emissao_nfce", "nota_nfce.recibo_nfce", "nota_nfce.impresso", "nota_nfce.chave_offline", "nota_nfce.operacao", "oper_fiscal.descricao desc_operacao"], "leftjoin": [{"tabela":"entidade", "condicao":"entidade.codcli = nota_nfce.codcli"}, {"tabela":"oper_fiscal", "condicao":"nota_nfce.operacao = oper_fiscal.codigo"}], "where": ["nota_nfce.emp_id = ${getCookie('emp_id')} and (dt_emissao >= ${sDataIni} and dt_emissao <= ${sDataFim}) ${impresso} ${protocolo} ${tipoTransmissao} ${sFatura} ${sCodCli}"],  "orderby": ["nota_nfce.fatura desc"]}`, null);

            if (!response) {
                return;
            }

            let jsonStr = await response.json();
            if (response.status != 200) {
                msgErro(jsonStr.RESULT[0].mensagem);
                return;
            }

            return jsonStr;
        } catch (error) {
            console.error(error);
            msgErro('Não foi possível buscar as notas fiscais');
        }

    }
    async function RetornaSerieNFCE() {
        const url = `/sisplan/funcoes/v1/pesquisa?`;
        try {
            let response = await requisicao('GET', url, `JSON={ "tabela":"empresa", "camposSelect":["emp_serienfce"], "where": ["emp_id = ${getCookie('emp_id')}"] }`, null);

            if (!response) {
                return;
            }

            let jsonStr = await response.json();
            if (response.status != 200) {
                msgErro(jsonStr.RESULT[0].mensagem);
                return;
            }
            let serie = '';
            if (jsonStr.RESULT[0][0].EMP_SERIENFCE != '') {
                serie = jsonStr.RESULT[0][0].EMP_SERIENFCE;
            } else {
                serie = '1';
            }
            return serie;
        } catch (error) {
            console.error(error);
            msgErro('Não foi possível buscar os dados do produto.');
        }
    }

    async function buscaItens(sFatura, sSerie) {
        const url = `/sisplan/funcoes/v1/pesquisa?`;
        try {
            const empId = getCookie('emp_id');
            let response = await requisicao('GET', url, `JSON={ "tabela":"notaiten_nfce", "camposSelect":[ "notaiten_nfce.codigo", "notaiten_nfce.descricao", "notaiten_nfce.cor", "cadcor.descricao desc_cor", "notaiten_nfce.tamanho", "notaiten_nfce.qtde", "notaiten_nfce.preco", "notaiten_nfce.valor", "notaiten_nfce.natureza", "notaiten_nfce.ordem"], "leftjoin": [{"tabela":"cadcor", "condicao":"cadcor.cor = notaiten_nfce.cor"}], "where": ["notaiten_nfce.fatura = '${sFatura}' and notaiten_nfce.serie = '${sSerie}' and notaiten_nfce.emp_id = ${empId}"] }`, null);

            if (!response) {
                return;
            }

            let jsonStr = await response.json();
            if (response.status != 200) {
                msgErro(jsonStr.RESULT[0].mensagem);
                return;
            }

            return jsonStr;
        } catch (error) {
            console.error(error);
            msgErro('Não foi possível buscar as notas fiscais');
        }
    }

    function retornaBotaoOpcoes(data) {
        return '<div style="text-align:center;"> ' +
            '   <div class="dropdown"> ' +
            '    <button class="btn btn-info btn-sm dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> ' +
            '    ' + data + ' ' +
            '    </button> ' +
            '    <div class="dropdown-menu"> ' +
            '    <a id="btn-mostrar-itens" class="dropdown-item" href="">Mostrar Itens</a>' +
            '    </div>' +
            '  </div>' +
            '</div>';
    }

    $('#btn-cliente').pesquisa('#txtCliente', 'CODCLI', 'NOME', '/sisplan/funcoes/v1/pesquisa?JSON={ "tabela":"entidade", "camposSelect":[ "codcli", "nome", "fantasia", "cnpj" ], "where": null}', 'Pesquisa Cliente', 'entidade');
    $('#txtCliente').autocompleta(3, `JSON={ "tabela":"entidade", "camposSelect":["CODCLI CHAVE, NOME DESCRICAO"], "where": [] }`);
    $('#btn-limpa-cliente').on('click', function () {
        $('#txtCliente').val('');
    });

    $('#btn-nota').pesquisa('#txtNota', 'FATURA', 'VALOR', '/sisplan/funcoes/v1/pesquisa?JSON={ "tabela":"nota_nfce", "camposSelect":[ "fatura", "dt_emissao", "valor" ], "where": null}', 'Pesquisa Notas', 'nota_nfce');
    $('#txtNota').autocompleta(3, `JSON={ "tabela":"NOTA_NFCE", "camposSelect":["FATURA CHAVE", "VALOR DESCRICAO"], "where": [] }`);
    $('#btn-limpa-nota').on('click', function () {
        $('#txtNota').val('');
    });

    $('#btnImprimir').on('click', async function () {
        const fatura = $('#txtNumeroNF').val();
        const serie = $('#txtSerieNF').val();
        const chave = $('#txtChaveNF').val();
        const chaveOffline = $('#txtChaveOffline').val();

        if (fatura == '') {
            msgAlerta('Nenhuma nota selecionada, impossível continuar.');
            return;
        }

        if (chave === '' && chaveOffline === '') {
            msgAlerta('Impossível imprimir NFC-e não transmitida.');
            return;
        }

        const url = `/sisplan/nfce/v1/imprimirnfce?FATURA=${fatura}&SERIE=${serie}`;
        try {
            $.LoadingOverlay("show");
            const bImprimeAutomatico = await verificaImprimirAutomatico('NFCE');
            const arquivo = await GeraRelatorio(`${url}&`, 'GET', 15000, false, 'NFCE');
            if (arquivo != undefined) {
                if (!bImprimeAutomatico) {
                    window.open(`${BASE_URI}/relatorios_api/pdf/${arquivo}`, '_blank');
                }
                await limparRelatorios();
            }
        } finally {
            $.LoadingOverlay("hide");
        }
    });

    $('#btnCancelar').on('click', async function () {
        let tr = $('#tabelaNotas tr.selected')[0];
        let data = $('#tabelaNotas').DataTable().row($(tr)).data();
        $('#txtCancFatura').val(data.FATURA);
        $('#txtCancSerie').val(data.SERIE);
        if (data.IMPRESSO == 'C') {
            msgAlerta('Esta nota fiscal já está cancelada. Impossível continuar.');
            return;
        }

        if (data.IMPRESSO == 'D') {
            msgAlerta('A NFe foi DENEGADA. Não pode ser cancelada no SEFAZ. Somente será cancelado as duplicatas, voltar o pedido e estoque se houver!');
        }
        $('#modal-cancelamento').modal('show');

    });

    $('#btn-confirmar-cancelamento').on('click', async function () {

        try {
            $.LoadingOverlay("show");
            const fatura = $('#txtCancFatura').val();
            const serie = $('#txtCancSerie').val();
            const justificativa = $('#txtCancJustificativa').val();
            let tr = $('#tabelaNotas tr.selected')[0];
            let data = $('#tabelaNotas').DataTable().row($(tr)).data();
            const chaveNfceCancA3 = data.CHAVE_NFCE;

            if (usaCertificadoA3 == '1' & (chaveNfceCancA3 != '')) {

                const infoEmpresaCancA3 = await retornaInformacaoEmpresa();

                const pesquisaXML = {
                    tabela: "XML_NOTAS",
                    camposSelect: [
                        "XML_NOTAS.ARQUIVO",
                    ],
                    where: [`XML_NOTAS.CHAVE_NFE = '${chaveNfceCancA3}' AND XML_NOTAS.TIPO = 'NFC'`]
                }

                const jsonStrPesquisaXML = await retornaJsonPesquisaPadrao(JSON.stringify(pesquisaXML));

                const xmlCanc = jsonStrPesquisaXML[0].ARQUIVO;

                //CONSULTA NA APILOCAL
                const responseApiLocalCancA3 = await requisicao_ecf('POST', '/nfce/consultar?', `CHAVE=${chaveNfceCancA3}`, JSON.stringify(infoEmpresaCancA3), 60000);

                if (responseApiLocalCancA3.status != 200) {
                    const msgErroCancA3 = await responseApiLocalCancA3.text();
                    msgErro(msgErroCancA3);
                    return;
                };

                const pesquisaLoteNFCE = {
                    tabela: "NOTA_NFCE",
                    camposSelect: [
                        "NOTA_NFCE.LOTE_NFCE, NOTA_NFCE.IMPRESSO, NOTA_NFCE.PROTOCOLO_NFCE",
                    ],
                    where: [`NOTA_NFCE.FATURA = '${fatura}' AND NOTA_NFCE.SERIE = '${serie}' AND NOTA_NFCE.CODVEN = ${data.CODVEN}`]
                };

                const jsonStrPesquisaLote = await retornaJsonPesquisaPadrao(JSON.stringify(pesquisaLoteNFCE));


                const usuario = getCookie('usuario');
                const empresa = getCookie('empresa');

                const responseApiLocalCancelamento = await requisicao_ecf('POST',
                    '/nfce/cancelar?',
                    `FATURA=${fatura}&SERIE=${serie}&JUSTIFICATIVA=${justificativa}&IMPRESSO=${jsonStrPesquisaLote[0].IMPRESSO}&CHAVE_NFCE=${chaveNfceCancA3}&LOTE_NFCE=${jsonStrPesquisaLote[0].LOTE_NFCE}&INFEMPRESA=${JSON.stringify(infoEmpresaCancA3)}&PROTOCOLO_NFCE=${jsonStrPesquisaLote[0].PROTOCOLO_NFCE}`,
                    xmlCanc, 120000)

                if (responseApiLocalCancelamento.status != 200) {
                    const mensagemErro = await responseApiLocalCancelamento.text();
                    msgErro(mensagemErro);
                    return;
                }

                const jsonApiLocal = await responseApiLocalCancelamento.json();

                const responseApiWebCanc = await requisicao('POST',
                    '/Sisplan/NFCE/v1/finalizacancelamento?',
                    `FATURA=${fatura}&SERIE=${serie}&EMPRESA=${empresa}&JUSTIFICATIVA=${justificativa}`,
                    jsonApiLocal.xml, 120000);

                const jsonApiWeb = await responseApiWebCanc.json()

                if (responseApiWebCanc.status != 200) {
                    msgErro(jsonApiWeb.mensagem);
                    return;
                }

                toastr.success(
                    'Cancelamento efetuado com sucesso!',
                    'Confirmação', {
                    toastClass: 'alert',
                    iconClasses: {
                        error: 'alert-error',
                        info: 'alert-info',
                        success: 'alert-success',
                        warning: 'alert-warning'
                    },
                    positionClass: "toast-top-center",
                    progressBar: true,
                    timeOut: 3000,
                    fadeOut: 1000,
                    onHidden() {
                        $('#modal-cancelamento').modal('hide');
                        $('#btn-consultar').trigger('click');
                    }
                }
                ).css({
                    "margin-top": "20%",
                    "width": "500px",
                    "max-width": "500px"
                });

            } else {

                const fatura = $('#txtCancFatura').val();
                const serie = $('#txtCancSerie').val();
                const justificativa = $('#txtCancJustificativa').val();
                let tr = $('#tabelaNotas tr.selected')[0];
                let data = $('#tabelaNotas').DataTable().row($(tr)).data();
                const url = '/Sisplan/NFCE/v1/CancelarNFCE?';
                let params = `SERIE=${serie}&FATURA=${fatura}&JUSTIFICATIVA=${justificativa}&CERTA3=${0}`;

                try {
                    let response = await requisicao('PUT', url, params, null, 60000);

                    if (!response) {
                        msgErro('Erro ao cancelar NFC-e');
                        return;
                    }

                    let jsonStr = await response.json();
                    if (response.status != 200) {
                        msgErro(jsonStr.mensagem);
                        return;
                    }

                    toastr.success(
                        'Cancelamento efetuado com sucesso!',
                        'Confirmação', {
                        toastClass: 'alert',
                        iconClasses: {
                            error: 'alert-error',
                            info: 'alert-info',
                            success: 'alert-success',
                            warning: 'alert-warning'
                        },
                        positionClass: "toast-top-center",
                        progressBar: true,
                        timeOut: 3000,
                        fadeOut: 1000,
                        onHidden() {
                            $('#modal-cancelamento').modal('hide');
                            $('#btn-consultar').trigger('click');
                        }
                    }
                    ).css({
                        "margin-top": "20%",
                        "width": "500px",
                        "max-width": "500px"
                    });
                } catch (error) {
                    console.error(error);
                }
            };
        } finally {
            $.LoadingOverlay("hide");
        };
    });

    // async function gerarNFCE(sJustificativa = '', individual = true) {

    // }

    const gerarNFCEVarios = async () => {
        const rotinaGeraVarios = async (sJustificativa = '') => {
            try {
                try {
                    $.LoadingOverlay("show");
                    const notasComErro = [];
                    const notasJaGeradas = [];
                    const notas = $('#tabelaNotas tr.selected');
                    for (let i = 0; i < notas.length; i++) {
                        const nota = notas[i];
                        const data = $('#tabelaNotas').DataTable().row($(nota)).data();
                        const fatura = data.FATURA;
                        const serie = data.SERIE;
                        const justificativa = sJustificativa;
                        const tipo = $('#tipo_transmissao').val();
                        const url = '/Sisplan/NFCE/v1/NFCE?';
                        if (data.PROTOCOLO_NFCE != '') {
                            notasJaGeradas.push(fatura + ' ');
                        } else {
                            const params = `SERIE=${serie}&FATURA=${fatura}&JUSTIFICATIVA=${justificativa}&TIPO=${tipo}&CERTA3=${usaCertificadoA3}`;
                            const response = await requisicao('PUT', url, params, null, 120000);

                            const jsonStr = await response.json();
                            if (response.status != 200) {
                                msgErro(jsonStr.mensagem);
                                notasComErro.push(fatura + ' ');
                            }
                            if (usaCertificadoA3 == '1' && (response.status == 200)) {
                                const xml = jsonStr.mensagem;
                                const infoEmpresa = await retornaInformacaoEmpresa();

                                const responseLocal = await requisicao_ecf('POST', '/nfce/emitir?', `EMPRESA=${JSON.stringify(infoEmpresa)}`, xml, 120000);

                                if (responseLocal.status != 200) {
                                    const mensagemErro = await responseLocal.text();
                                    msgErro(mensagemErro);
                                    return;
                                }

                                const retornoNota = await responseLocal.json();

                                const reponseApiWeb = await requisicao(
                                    'POST',
                                    '/sisplan/nfce/v1/finalizanfce?',
                                    `FATURA=${fatura}&SERIE=${serie}&TIPO=${tipo}`,
                                    JSON.stringify(retornoNota),
                                    60000
                                );
                                if (!response) {
                                    return;
                                }
                                if (reponseApiWeb.status != 200) {
                                    const mensagemRetorno = await reponseApiWeb.json();
                                    msgErro(mensagemRetorno.mensagem);
                                    return;
                                };
                            }
                        }
                    }

                    if (notasJaGeradas.length > 0) {
                        toastr.error(
                            `Notas ${notasJaGeradas.toString()} já estão geradas, favor verificar.`,
                            'Atenção', {
                            toastClass: 'alert',
                            iconClasses: {
                                error: 'alert-error',
                                info: 'alert-info',
                                success: 'alert-success',
                                warning: 'alert-warning'
                            },
                            positionClass: "toast-top-center",
                            progressBar: true,
                            timeOut: 3000,
                            fadeOut: 1000,
                            onHidden() {
                                $('#btn-consultar').trigger('click');
                            }
                        }
                        ).css({
                            "margin-top": "20%",
                            "width": "500px",
                            "max-width": "500px"
                        });
                        return;
                    }

                    if (notasComErro.length > 0) {
                        toastr.error(
                            `Notas ${notasComErro.toString()} não geradas, favor verificar.`,
                            'Atenção', {
                            toastClass: 'alert',
                            iconClasses: {
                                error: 'alert-error',
                                info: 'alert-info',
                                success: 'alert-success',
                                warning: 'alert-warning'
                            },
                            positionClass: "toast-top-center",
                            progressBar: true,
                            timeOut: 3000,
                            fadeOut: 1000,
                            onHidden() {
                                $('#btn-consultar').trigger('click');
                            }
                        }
                        ).css({
                            "margin-top": "20%",
                            "width": "500px",
                            "max-width": "500px"
                        });
                        return;
                    }

                    toastr.success(
                        'NFCEs geradas com sucesso!',
                        'Confirmação', {
                        toastClass: 'alert',
                        iconClasses: {
                            error: 'alert-error',
                            info: 'alert-info',
                            success: 'alert-success',
                            warning: 'alert-warning'
                        },
                        positionClass: "toast-top-center",
                        progressBar: true,
                        timeOut: 3000,
                        fadeOut: 1000,
                        onHidden() {
                            $('#btn-consultar').trigger('click');
                        }
                    }
                    ).css({
                        "margin-top": "20%",
                        "width": "500px",
                        "max-width": "500px"
                    });
                } finally {
                    $.LoadingOverlay("hide");
                }
            } catch (error) {
                console.error(error);
                msgErro('Erro ao gerar NFC-e');
            }
        }

        try {
            $('#btnGerar').attr('disabled', true);
            const tr = $('#tabelaNotas tr.selected')[0];
            if (tr === undefined) {
                msgAlerta('Selecione uma Nota para gerar.');
                return;
            }

            if ($('#tipo_transmissao').val() == '0') {
                await rotinaGeraVarios();
            } else {
                msgAlerta('Não é possível gerar mais de uma NFC-e off-line.');
                return;
            }
        } finally {
            $('#btnGerar').attr('disabled', false);
        }
    }

    async function retornaInformacaoEmpresa() {
        try {
            let url = `/sisplan/funcoes/v1/pesquisa?`;
            let response = await requisicao('GET', url, `JSON={ 
            "tabela":"empresa", 
            "camposSelect":["emp_estado", "emp_csrt", "emp_csrt_id", "emp_pat", "emp_cert", "emp_crt", "emp_cnpj", "emp_id"], 
            "where": ["emp_id = ${getCookie('emp_id')}"] 
          }`, null);
            if (!response) {
                return;
            }
            let jsonStr = await response.json();
            if (response.status != 200) {
                msgErro(jsonStr.RESULT[0].mensagem);
                return;
            }
            return jsonStr.RESULT[0][0];
        } catch (error) {
            console.error(error);
            msgErro('Erro ao retornar dados da empresa, Erro: ');
        }
    }


    const rotinaGeraIndividual = async (sJustificativa = '') => {
        try {
            try {
                $.LoadingOverlay("show");
                let tr = $('#tabelaNotas tr.selected')[0];
                let data = $('#tabelaNotas').DataTable().row($(tr)).data();
                let fatura = data.FATURA;
                let serie = data.SERIE;
                let justificativa = sJustificativa;
                let tipo = $('#tipo_transmissao').val();
                let url = '/Sisplan/NFCE/v1/NFCE?';
                let params = `SERIE=${serie}&FATURA=${fatura}&JUSTIFICATIVA=${justificativa}&TIPO=${tipo}&CERTA3=${usaCertificadoA3}`;
                let response = await requisicao('PUT', url, params, null, 120000);


                let jsonStr = await response.json();

                if (response.status != 200) {
                    msgErro(jsonStr.mensagem);
                    return;
                };

                if (usaCertificadoA3 == '1' && (response.status == 200)) {
                    const xml = jsonStr.mensagem;
                    const infoEmpresa = await retornaInformacaoEmpresa();

                    //transmite a nfce na apilocal
                    const responseLocal = await requisicao_ecf('POST', '/nfce/emitir?', `EMPRESA=${JSON.stringify(infoEmpresa)}`, xml, 120000);
                    if (responseLocal.status != 200) {
                        const mensagemErro = await responseLocal.text();
                        msgErro(mensagemErro);
                        return;
                    }

                    const retornoNota = await responseLocal.json();

                    // termina de transmitir na api web, da os updates etc
                    const reponseApiWeb = await requisicao(
                        'POST',
                        '/sisplan/nfce/v1/finalizanfce?',
                        `FATURA=${fatura}&SERIE=${serie}&TIPO=${tipo}`,
                        JSON.stringify(retornoNota),
                        60000
                    );
                    if (!response) {
                        return;
                    }
                    if (reponseApiWeb.status != 200) {
                        const mensagemRetorno = await reponseApiWeb.json();
                        msgErro(mensagemRetorno.mensagem);
                        return;
                    };
                }

                const urlImprimir = `/sisplan/nfce/v1/imprimirnfce?FATURA=${fatura}&SERIE=${serie}`;
                try {
                    $.LoadingOverlay("show");
                    const bImprimeAutomatico = await verificaImprimirAutomatico('NFCE');
                    const arquivo = await GeraRelatorio(`${urlImprimir}&`, 'GET', 15000, false, 'NFCE');
                    if (arquivo != undefined) {
                        if (!bImprimeAutomatico) {
                            window.open(`${BASE_URI}/relatorios_api/pdf/${arquivo}`, '_blank');
                        }
                        await limparRelatorios();
                    }
                } finally {
                    $.LoadingOverlay("hide");
                }

                toastr.success(
                    'NFC-e gerada com sucesso!',
                    'Confirmação', {
                    toastClass: 'alert',
                    iconClasses: {
                        error: 'alert-error',
                        info: 'alert-info',
                        success: 'alert-success',
                        warning: 'alert-warning'
                    },
                    positionClass: "toast-top-center",
                    progressBar: true,
                    timeOut: 3000,
                    fadeOut: 1000,
                    onHidden() {
                        $('#btn-consultar').trigger('click');
                    }
                }
                ).css({
                    "margin-top": "20%",
                    "width": "500px",
                    "max-width": "500px"
                });
            } finally {
                $.LoadingOverlay("hide");
            }
        } catch (error) {
            console.error(error);
            msgErro('Erro ao gerar NFC-e');
        }
    }

    const gerarNFCEIndividual = async (sJustificativa = '') => {
        try {
            $('#btnGerar').attr('disabled', true);
            const tr = $('#tabelaNotas tr.selected')[0];
            if (tr === undefined) {
                msgAlerta('Selecione uma Nota para gerar.');
                return;
            }

            const data = $('#tabelaNotas').DataTable().row($(tr)).data();
            const today = new Date();
            const dy = String(today.getDate()).padStart(2, "0");
            const mt = String(today.getMonth() + 1).padStart(2, "0");
            const yr = today.getFullYear();

            if (data.PROTOCOLO_NFCE != '') {
                msgAlerta('NFC-e já gerada, verifique.');
                return;
            }

            if ($('#tipo_transmissao').val() == '0') {
                if (data.DT_EMISSAO == `${yr}-${mt}-${dy}`) {
                    await rotinaGeraIndividual(sJustificativa);
                } else {
                    msgAlerta('Data da NFC-e diferente da data atual, deseja prosseguir com o processo?', async () => { await rotinaGeraIndividual(sJustificativa); });
                }
            } else {
                if ($('.campoSel:checked').length > 1) {
                    msgAlerta('Não é possível gerar mais de uma NFC-e off-line.');
                    return;
                }

                $('#txtJustificativaOffline').val('');
                $('#modal-gerar-offline').modal('show');
            }
        } finally {
            $('#btnGerar').attr('disabled', false);
        }
    }


    $('#btnGerar').on('click', async function () {
        const maisDeUmaNotaSelecionada = $('.campoSel:checked').length > 1;
        if (maisDeUmaNotaSelecionada) {
            await gerarNFCEVarios();
        } else {
            await gerarNFCEIndividual();
        }
    });

    $('#btn-gerar-offline').on('click', async function () {
        if ($('#txtJustificativaOffline').val() == '') {
            msgErro('Justificativa não pode estar em branco.');
            return;
        }
        if ($('#txtJustificativaOffline').val().length < 15) {
            msgErro('Justificativa deve ter no mínimo 15 caracteres.');
            return;
        }
        if ($('#txtJustificativaOffline').val().length > 100) {
            msgErro('Justificativa deve ter no máximo 100 caracteres.');
            return;
        }

        await rotinaGeraIndividual($('#txtJustificativaOffline').val());
        $('#modal-gerar-offline').modal('hide');
    });


    $('#btn-confirmar-inutilizacao').on('click', async function () {
        try {
            // validar os campos de serie, nota inicial final..
            $.LoadingOverlay("show");

            const url = '/Sisplan/NFCE/v1/InutilizarNFCE?';
            let serie = $('#txtNotaSerie').val();
            let inicio = $('#txtNotaIni').val();
            let final = $('#txtNotaFim').val();
            let justificativa = $('#txtJustificativa').val();
            let params = `SERIE=${serie}&INICIO=${inicio}&FIM=${final}&JUSTIFICATIVA=${justificativa}`;

            try {
                let response = await requisicao('PUT', url, params, null);

                if (!response) {
                    msgErro('Erro ao Inutilizar NFCE');
                    return;
                }

                let jsonStr = await response.json();
                if (response.status != 200) {
                    msgErro(jsonStr.mensagem);
                    return;
                }

                toastr.success(
                    'Inutilização efetuada com sucesso!',
                    'Confirmação', {
                    toastClass: 'alert',
                    iconClasses: {
                        error: 'alert-error',
                        info: 'alert-info',
                        success: 'alert-success',
                        warning: 'alert-warning'
                    },
                    positionClass: "toast-top-center",
                    progressBar: true,
                    timeOut: 3000,
                    fadeOut: 1000,
                    onHidden() {
                        $('#modal-inutilizar').modal('hide');
                        $('#btn-consultar').trigger('click');
                    }
                }
                ).css({
                    "margin-top": "20%",
                    "width": "500px",
                    "max-width": "500px"
                });
            } catch (error) {
                console.error(error);
            }
        } finally {
            $.LoadingOverlay("hide");
        }
    });

    $('#btnExcluir').on('click', async function () {
        try {
            try {
                if ($('#txtProtocoloNF').val() != '') {
                    msgAlerta('Nota não pode ser excluída, pois consta no SEFAZ como autorizada ou cancelada.');
                    return;
                }
                $.LoadingOverlay("show");

                let tr = $('#tabelaNotas tr.selected')[0];
                let data = $('#tabelaNotas').DataTable().row($(tr)).data();
                if (data.IMPRESSO != 'C') {
                    msgAlerta('Nota precisa ser cancelada primeiro.');
                    return;
                }

                if (confirm('Você realmente deseja excluir esse registro?')) {

                    const url = '/Sisplan/NFCE/v1/NFCE?';
                    let response = await requisicao('DELETE', url, `FATURA=${data.FATURA}&SERIE=${data.SERIE}&TIPO=0`, null);

                    if (!response) {
                        msgErro('Erro ao Excluir NFCE');
                        return;
                    }

                    let jsonStr = await response.json();
                    if (response.status != 200) {
                        msgErro(jsonStr.mensagem);
                        return;
                    }

                    toastr.success(
                        'Exclusão efetuada com sucesso!',
                        'Confirmação', {
                        toastClass: 'alert',
                        iconClasses: {
                            error: 'alert-error',
                            info: 'alert-info',
                            success: 'alert-success',
                            warning: 'alert-warning'
                        },
                        positionClass: "toast-top-center",
                        progressBar: true,
                        timeOut: 3000,
                        fadeOut: 1000,
                        onHidden() {
                            $('#btn-consultar').trigger('click');
                        }
                    }
                    ).css({
                        "margin-top": "20%",
                        "width": "500px",
                        "max-width": "500px"
                    });
                }
            } finally {
                $.LoadingOverlay("hide");
            }
        } catch (error) {
            console.error(error);
            msgErro('Erro ao excluir NFC-e');
        }
    });

    $('#btnConsultar').on('click', async function () {
        const fatura = $('#txtNumeroNF').val();
        const serie = $('#txtSerieNF').val();
        const chave = $('#txtChaveNF').val();
        const protocolo = $('#txtProtocoloNF').val();
        const url = `/sisplan/nfce/v1/consultanfce?`;

        if (fatura == '') {
            msgAlerta('Favor selecionar uma nota para consultar.');
            return;
        }
        if (chave == '') {
            msgAlerta('Nota não gerada, impossível consultar.');
            return;
        }

        try {
            if (usaCertificadoA3 == '1') {
                const infoEmpresaA3 = await retornaInformacaoEmpresa();

                const responseApiLocal = await requisicao_ecf('POST', '/nfce/consultar?', `CHAVE=${chave}`, JSON.stringify(infoEmpresaA3), null)

                if (!responseApiLocal) {
                    return;
                };
                const jsonStrApiLocal = await responseApiLocal.json();

                if (responseApiLocal.status != 200) {
                    msgErro(jsonStrApiLocal.mensagem);
                    return;
                };

                const protocoloA3Consulta = jsonStrApiLocal.protocolo;
                const statusA3Consulta = jsonStrApiLocal.cStat;
                const dtrecebimentoA3Consulta = jsonStrApiLocal.dhRecbto;
                const motivoA3Consulta = jsonStrApiLocal.xMotivo;

                const responseA3 = await requisicao('POST', url, `FATURA=${fatura}&SERIE=${serie}&CHAVE=${chave}&PROTOCOLO=${protocoloA3Consulta}&STATUS=${statusA3Consulta}&MOTIVO=${motivoA3Consulta}&DTRECEBIMENTO=${dtrecebimentoA3Consulta}&CERTA3=${usaCertificadoA3}`, null);

                if (!responseA3) {
                    return;
                };

                const jsonStrA3 = await responseA3.json();

                if (responseA3.status != 200) {
                    msgErro(jsonStrA3.mensagem);
                    return;
                };

                await msgAlerta(jsonStrA3.mensagem);

                $('#btn-consultar').trigger('click');
            } else {
                const response = await requisicao('POST', url, `FATURA=${fatura}&SERIE=${serie}&CHAVE=${chave}&PROTOCOLO=${protocolo}&CERTA3=${usaCertificadoA3}`, null);

                if (!response) {
                    return;
                };

                const jsonStr = await response.json();

                if (response.status != 200) {
                    msgErro(jsonStr.mensagem);
                    return;
                };

                await msgAlerta(jsonStr.mensagem);

                $('#btn-consultar').trigger('click');
            }
        } catch (error) {
            console.error(error);
        }
    });

    $('#confirmar_dados').on('click', async function () {
        try {
            try {
                $.LoadingOverlay("show");
                if ($('#txtProtocoloNF').val() == '') {
                    let arrItens = [];
                    for (let index = 0; index < $('#tabelaItens').DataTable().rows().count(); index++) {
                        const dados = $('#tabelaItens').DataTable().row(index).data();
                        const natureza = $($('.campoNatureza')[index]).val();
                        const item = {};
                        item.FATURA = $('#txtNotaItens').val();
                        item.SERIE = $('#txtSerieItens').val();
                        item.CODIGO = dados.CODIGO;
                        item.COR = dados.COR;
                        item.TAM = dados.TAMANHO;
                        item.ORDEM = dados.ORDEM;
                        item.NATUREZA = natureza;
                        arrItens.push(item);
                    }
                    const url = '/Sisplan/NFCE/v1/AlterarNaturezaNFCE?';
                    let response = await requisicao('PUT', url, `JSON=${encodeURIComponent(JSON.stringify(arrItens))}`, null);

                    if (!response) {
                        msgErro('Erro ao alterar Naturezas');
                        return;
                    }

                    let jsonStr = await response.json();
                    if (response.status != 200) {
                        msgErro(jsonStr.mensagem);
                        return;
                    }
                    toastr.success(
                        'Alteração efetuada com sucesso!',
                        'Confirmação', {
                        toastClass: 'alert',
                        iconClasses: {
                            error: 'alert-error',
                            info: 'alert-info',
                            success: 'alert-success',
                            warning: 'alert-warning'
                        },
                        positionClass: "toast-top-center",
                        progressBar: true,
                        timeOut: 3000,
                        fadeOut: 1000,
                        onHidden() {
                            $('#modal-itens').modal('hide');
                        }
                    }
                    ).css({
                        "margin-top": "20%",
                        "width": "500px",
                        "max-width": "500px"
                    });
                } else {
                    $('#modal-itens').modal('hide');
                }
            } finally {
                $.LoadingOverlay("hide");
            }

        } catch (error) {
            console.error(error);
        }
    });

    $('#btnInutilizar').on('click', async function () {
        let serie = await RetornaSerieNFCE();
        $('#txtNotaSerie').val(serie);
        $('#modal-inutilizar').modal('show');
    });

    $('#btn-consultar').on('click', async function () {
        try {
            $.LoadingOverlay("show");
            $('#tabelaNotas').DataTable().clear().draw(false);
            $('#checkTodosItens').prop('checked', false);
            // $('#btn-filtros').trigger('click');
            let dados = await buscaNotas($('input[name=rg_status]:checked').val(), $('input[name=rg_protocolo]:checked').val(), $('input[name=rg_tipo_transmissao]:checked').val());
            let dataSetCols = [];

            if (!$.isEmptyObject(dados.RESULT[0][0])) {
                let keys = Object.keys(dados.RESULT[0][0]);
                const colunaData = gerarVarios ? 3 : 2;
                const colunasInvisiveis = gerarVarios ? [8, 9, 10, 11, 13] : [7, 8, 9, 10, 12];
                const colunaValor = gerarVarios ? 6 : 5;
                const colunaBotao = gerarVarios ? 1 : 0;

                if (gerarVarios) {
                    dataSetCols.push({
                        'title': 'SEL',
                        'data': 'SEL'
                    });
                }

                // eslint-disable-next-line guard-for-in, no-restricted-syntax
                for (let k in keys) {
                    dataSetCols.push({
                        'title': keys[k],
                        'data': keys[k]
                    });
                }


                if (gerarVarios) {
                    dataSetCols[0].render = function (data, type, row, meta) {
                        return `<div class="icheck-primary d-inline">
                        <input type="checkbox" id="check${meta.row}" class="campoSel">
                        <label for="check${meta.row}"></label>
                        </div>`
                    }
                }

                dataSetCols[colunaData].type = 'date-br';
                dataSetCols[colunaData].render = function (data) {
                    x = data.slice(0, 10).split('-');
                    return `${x[2]}/${x[1]}/${x[0]}`;
                };

                $('#tabelaNotas').DataTable({
                    paging: true,
                    filter: true,
                    info: true,
                    order: true,
                    destroy: true,
                    select: true,
                    keys: true,
                    "columnDefs": [{
                        "targets": colunasInvisiveis,
                        "visible": false
                    },
                    {
                        "render": function (data) {
                            return parseFloat(data).toLocaleString('pt-BR', {
                                maximumFractionDigits: 2,
                                minimumFractionDigits: 2
                            });
                        },
                        "targets": [colunaValor]
                    }],
                    "language": {
                        "sEmptyTable": "Nenhum registro encontrado",
                        "sInfo": "_TOTAL_ registros",
                        "sInfoEmpty": " 0 registros",
                        "sInfoFiltered": "(Filtrados de _MAX_ registros)",
                        "sInfoPostFix": "",
                        "sInfoThousands": ".",
                        "sLengthMenu": "_MENU_ resultados",
                        "sLoadingRecords": "Carregando...",
                        "sProcessing": "Processando...",
                        "sZeroRecords": "Nenhum registro encontrado",
                        "sSearch": "Pesquisar",
                        "oPaginate": {
                            "sNext": "Próximo",
                            "sPrevious": "Anterior",
                            "sFirst": "Primeiro",
                            "sLast": "Último"
                        },
                        "oAria": {
                            "sSortAscending": ": Ordenar colunas de forma ascendente",
                            "sSortDescending": ": Ordenar colunas de forma descendente"
                        }
                    },
                    "data": dados.RESULT[0],
                    "columns": dataSetCols,
                    "columnDefs": [
                        {
                            targets: [colunaBotao], render: function (data, type, row) {
                                return retornaBotaoOpcoes(data);
                            },
                        },
                    ],
                });

            }

            const adicionaFuncaoSelecionar = () => {
                $('.campoSel').off();
                $('.campoSel').on('change', function () {
                    const atualEstaSelecionado = $(this).prop('checked');
                    const peloMenosUmSelecionado = $('.campoSel:checked').length > 1;
                    const nenhumSelecionado = $('.campoSel:checked').length == 0;
                    const data = $('#tabelaNotas').DataTable().row($(this).closest('tr')).data();
                    const tr = $(this).closest('tr');
                    if (!tr.hasClass('selected')) {
                        tr.addClass('selected');
                    } else {
                        tr.removeClass('selected');
                    }

                    if (atualEstaSelecionado) {
                        $('#txtNumeroNF').val(data.FATURA);
                        $('#txtSerieNF').val(data.SERIE);
                        $('#txtEmissaoNF').val(data.EMISSAO_NFCE);
                        $('#txtProtocoloNF').val(data.PROTOCOLO_NFCE);
                        $('#txtReciboNF').val(data.RECIBO_NFCE);
                        $('#txtChaveNF').val(data.CHAVE_NFCE);
                        $('#txtChaveOffline').val(data.CHAVE_OFFLINE);
                    } else if (nenhumSelecionado) {
                        $('#txtNumeroNF').val('');
                        $('#txtSerieNF').val('');
                        $('#txtEmissaoNF').val('');
                        $('#txtProtocoloNF').val('');
                        $('#txtReciboNF').val('');
                        $('#txtChaveNF').val('');
                        $('#txtChaveOffline').val('');
                    }
                    else {
                        const ultimaLinhaEncontrada = $($('.campoSel:checked')[$('.campoSel:checked').length - 1]).closest('tr');
                        const dataUltimaLinhaEncontrada = $('#tabelaNotas').DataTable().row(ultimaLinhaEncontrada).data();
                        $('#txtNumeroNF').val(dataUltimaLinhaEncontrada.FATURA);
                        $('#txtSerieNF').val(dataUltimaLinhaEncontrada.SERIE);
                        $('#txtEmissaoNF').val(dataUltimaLinhaEncontrada.EMISSAO_NFCE);
                        $('#txtProtocoloNF').val(dataUltimaLinhaEncontrada.PROTOCOLO_NFCE);
                        $('#txtReciboNF').val(dataUltimaLinhaEncontrada.RECIBO_NFCE);
                        $('#txtChaveNF').val(dataUltimaLinhaEncontrada.CHAVE_NFCE);
                        $('#txtChaveOffline').val(dataUltimaLinhaEncontrada.CHAVE_OFFLINE);
                    }

                    const componentesAEsconder = ['#btnImprimir', '#btnCancelar', '#btnExcluir', '#btnConsultar'];
                    const varreComponentesEModificaClasse = (desabilita) => {
                        for (let i = 0; i < componentesAEsconder.length; i++) {
                            const componente = componentesAEsconder[i];
                            if (desabilita) {
                                $(componente).addClass('d-none');
                            }
                            else {
                                $(componente).removeClass('d-none');
                            }
                        }
                    }
                    if (peloMenosUmSelecionado) {
                        varreComponentesEModificaClasse(true);
                    } else {
                        varreComponentesEModificaClasse(false);
                    }
                });
            }

            adicionaFuncaoSelecionar();

            $('#tabelaNotas')
                .on('page.dt', function () {
                    console.log('es');
                    adicionaFuncaoSelecionar();
                })
                .dataTable();

        } finally {
            $.LoadingOverlay("hide");
            $('#modal-filtros').modal('hide');
        }
    });
    //   $('#btn-consultar').trigger('click');
    $('a[data-toggle="tab"]').on('shown.bs.tab', function () {
        $.fn.dataTable.tables({
            visible: true,
            api: true
        }).columns.adjust();
    });



    $('#tabelaNotas tbody').on('click', 'tr', async function () {
        if (gerarVarios) {
            const posicaoSelecionada = $(this).index();
            const campoEstaSelecionado = $($('.campoSel')[posicaoSelecionada]).prop('checked');
            $($('.campoSel')[posicaoSelecionada]).prop('checked', !campoEstaSelecionado).trigger('change');
        } else {
            if ($(this).hasClass('selected')) {
                $(this).removeClass('selected');
            } else {
                $('#tabelaNotas').DataTable().$('tr.selected').removeClass('selected');
                $(this).addClass('selected');
                if ($('#tabelaNotas').DataTable().rows().count() == 0) {
                    $('#txtNumeroNF').val('');
                    $('#txtSerieNF').val('');
                    $('#txtEmissaoNF').val('');
                    $('#txtProtocoloNF').val('');
                    $('#txtReciboNF').val('');
                    $('#txtChaveNF').val('');
                    $('#txtChaveOffline').val('');
                } else {
                    let data = $('#tabelaNotas').DataTable().row($(this)).data();
                    $('#txtNumeroNF').val(data.FATURA);
                    $('#txtSerieNF').val(data.SERIE);
                    $('#txtEmissaoNF').val(data.EMISSAO_NFCE);
                    $('#txtProtocoloNF').val(data.PROTOCOLO_NFCE);
                    $('#txtReciboNF').val(data.RECIBO_NFCE);
                    $('#txtChaveNF').val(data.CHAVE_NFCE);
                    $('#txtChaveOffline').val(data.CHAVE_OFFLINE);
                }
            }

        }
    });


    $('#tabelaNotas').on('click', '#btn-mostrar-itens', async function () {
        try {
            window.event.preventDefault();
            $.LoadingOverlay("show");
            let tr = this.closest('tr');
            let data = $('#tabelaNotas').DataTable().row($(tr)).data();
            let dados = await buscaItens(data.FATURA, data.SERIE);
            $('#txtNotaItens').val(data.FATURA);
            $('#txtSerieItens').val(data.SERIE);
            $('#modal-itens-title').html(`Itens da nota: ${data.FATURA}`);
            let dataSetCols = [];

            let keys = Object.keys(dados.RESULT[0][0]);
            // eslint-disable-next-line no-restricted-syntax, guard-for-in
            for (let k in keys) {
                dataSetCols.push({
                    'title': keys[k],
                    'data': keys[k]
                });
            }

            // eslint-disable-next-line no-shadow
            dataSetCols[8].render = function (data, _type, _row, meta) {
                return `${'<div class="group-default form-group">' +
                    '<div class="relative">' +
                    '<input type="text" placeholder="Natureza" id="natureza_col_'}${[meta.row]}_row_${[meta.col]}" readonly class="input-default focus form-control validate campoNatureza" value="${data}"> ` +
                    `</div>` +
                    `</div>`;
            };

            let decimais = parseInt(await CopiaParametro("SISTEMA", 1)) + 2;
            if (isNaN(decimais)) {
                decimais = 2;
            }

            tabelaItens = $('#tabelaItens').DataTable({
                paging: false,
                filter: false,
                info: true,
                order: true,
                destroy: true,
                "language": {
                    "sEmptyTable": "Nenhum registro encontrado",
                    "sInfo": "_TOTAL_ registros",
                    "sInfoEmpty": " 0 registros",
                    "sInfoFiltered": "(Filtrados de _MAX_ registros)",
                    "sInfoPostFix": "",
                    "sInfoThousands": ".",
                    "sLengthMenu": "_MENU_ resultados",
                    "sLoadingRecords": "Carregando...",
                    "sProcessing": "Processando...",
                    "sZeroRecords": "Nenhum registro encontrado",
                    "sSearch": "Pesquisar",
                    "oPaginate": {
                        "sNext": "Próximo",
                        "sPrevious": "Anterior",
                        "sFirst": "Primeiro",
                        "sLast": "Último"
                    },
                    "oAria": {
                        "sSortAscending": ": Ordenar colunas de forma ascendente",
                        "sSortDescending": ": Ordenar colunas de forma descendente"
                    }
                },
                "data": dados.RESULT[0],
                "columns": dataSetCols,
                "columnDefs": [{
                    "targets": [9],
                    "visible": false
                },
                {
                    "render": function (data) {
                        return parseFloat(data).toLocaleString('pt-BR', {
                            maximumFractionDigits: 2,
                            minimumFractionDigits: 2
                        });
                    },
                    "targets": [7]
                },
                {
                    render(data) {
                        return parseFloat(data).toLocaleString("pt-br", {
                            style: "currency",
                            currency: "BRL",
                            maximumFractionDigits: decimais,
                            minimumFractionDigits: decimais
                        });
                    },
                    targets: [6],
                }],
            });

            if ($('#txtProtocoloNF').val() == '') {
                for (let i = 0; i < $('.campoNatureza').length; i++) {
                    $(`#natureza_col_${i}_row_8`).pesquisa(`#natureza_col_${i}_row_8`, 'NATUREZA', 'NATUREZA', `/sisplan/funcoes/v1/pesquisa?JSON={ "tabela":"natureza", "camposSelect":["natureza"], "where": ["tipo = ${"'V'"} and tp_base = 1"]}`, 'Pesquisa Natureza', 'natureza', 'S');
                }
            }

            $('#modal-itens').modal('show');
        } finally {
            $.LoadingOverlay("hide");
        }
    });

    $('#btn-Config').on('click', async function () {
        try {
            const url = '/sisplan/nfce/v1/buscarininfce?';
            const params = '';
            const response = await requisicao('GET', url, params, null);

            const jsonIni = await response.json();
            if (response.status != 200) {
                console.log(jsonIni.mensagem);
                msgAlerta(jsonIni.mensagem);
                return;
            }
            $('#txtVersao').val(jsonIni.versao);
            $('#txtIDCSC').val(jsonIni.iDCSC);
            $('#txtDiretorioLog').val(jsonIni.diretorioLog);
            $('#txtCSC').val(jsonIni.cSC);

            if (jsonIni.sincrono == 'S') {
                $('#txtSincrono').val('S');
            } else {
                $('#txtSincrono').val('N');
            }

            if (jsonIni.ambiente == '2') {
                $('#txtAmbiente').val('2');
            } else {
                $('#txtAmbiente').val('1');
            }
        } finally {
            $('#modal-Config').modal('show');
        }
    });

    $('#btn-confirmar-config').on('click', async function () {
        try {
            const params = '';
            const NFCE = {
                versao: $('#txtVersao').val(),
                idcsc: $('#txtIDCSC').val(),
                diretorioLog: $('#txtDiretorioLog').val(),
                csc: $('#txtCSC').val(),
                sincrono: $('#txtSincrono').val(),
                ambiente: $('#txtAmbiente').val()
            };
            const url = '/sisplan/nfce/v1/gravarininfce?';
            const response = await requisicao('POST', url, params, JSON.stringify(NFCE), 15000);
            console.log(response);

            if (response.status != 200) {
                const json = await response.json();
                msgAlerta(json.mensagem);
            }

            if (response.status == 200) {
                toastr.success(
                    'Configuração gravada com sucesso!',
                    'Confirmação', {
                    toastClass: 'alert',
                    iconClasses: {
                        error: 'alert-error',
                        info: 'alert-info',
                        success: 'alert-success',
                        warning: 'alert-warning'
                    },
                    positionClass: "toast-top-center",
                    progressBar: true,
                    timeOut: 3000,
                    fadeOut: 1000,
                    onHidden() {
                        $('#modal-Config').modal('hide');
                    }
                }
                ).css({
                    "margin-top": "20%",
                    "width": "500px",
                    "max-width": "500px"
                });
            } else {
                return;
            }
        } finally {
            $('#modal-Config').modal('hide');
        }
    });

    $('#btnEmail').on('click', async function () {
        const tr = $('#tabelaNotas tr.selected')[0];
        if (tr == undefined) {
            msgAlerta('Selecione uma NFC-e para enviar e-mail.')
            return;
        }
        await enviaEmail();
    });

    $('#btn-consultar').trigger('click');

    async function enviaEmail() {
        const fatura = $('#txtNumeroNF').val();
        const serie = $('#txtSerieNF').val();
        const url = '/sisplan/nfce/v1/enviaremail?';
        try {
            try {
                $.LoadingOverlay("show");
                const response = await requisicao('POST', url, `FATURA=${fatura}&SERIE=${serie}&CODUSUARIO=${getCookie('cod_usuario')}`, null, 300000);
                if (!response) {
                    return;
                }
                const jsonStr = await response.json();
                if (response.status != 200) {
                    msgErro(jsonStr.mensagem)
                    return;
                }
                await msgSucesso(jsonStr.mensagem);
            } catch (error) {
                console.error(error);
                msgErro('Erro ao enviar e-mail');
            }
        } finally {
            $.LoadingOverlay("hide");
        }
    }
});