$(document).ready(async function () {

  let options = {
    series: [{
      name: "Cobertura",
      data: [{}]
    }],
    chart: {
      type: 'bar',
      height: 300
    },
    tooltip: {
      x: {
        formatter: function (val) {
          return val;
        }
      }
    },
    xaxis: {
      type: 'category',
      labels: {
        formatter: function (val) {
          return '';
        }
      }
    },
    title: {
      text: 'Top 15 grupos com maior cobertura de estoque',
    },
    fill: {
      colors: ['#75BE25']
    }
  };

  let options2 = {
    series: [{
      name: "Percentual",
      data: [{}]
    }],
    chart: {
      type: 'bar',
      height: 300
    },
    plotOptions: {
      bar: {
        colors: {
          ranges: [{
            from: -100,
            to: -46,
            color: '#F15B46'
          }, {
            from: -45,
            to: 0,
            color: '#FEB019'
          }]
        },
        columnWidth: '80%',
      }
    },
    tooltip: {
      x: {
        formatter: function (val) {
          return val;
        }
      }
    },
    xaxis: {
      type: 'category',
      labels: {
        formatter: function (val) {
          return '';
        }
      }
    },
    title: {
      text: 'Top 15 grupos com maior necessidade de compra',
    },
  };

  let listaOrdenacao = [];
  let controleColunas;
  let colunas = JSON.parse(localStorage.getItem('colunasInvisiveisRelatorios'));

  // aqui so valida se nao existe tem que criar para nao dar erro
  if (colunas == null || colunas.coberturaEstoqueGrupo == undefined) {
    localStorage.setItem('colunasInvisiveisRelatorios', JSON.stringify({ ...colunas, coberturaEstoqueGrupo: [] }))
    colunas = JSON.parse(localStorage.getItem('colunasInvisiveisRelatorios'))
  }

  if (colunas == null || colunas.coberturaEstoqueEtiqueta == undefined) {
    localStorage.setItem('colunasInvisiveisRelatorios', JSON.stringify({ ...colunas, coberturaEstoqueEtiqueta: [] }))
    colunas = JSON.parse(localStorage.getItem('colunasInvisiveisRelatorios'))
  }

  if (colunas == null || colunas.coberturaEstoqueLinha == undefined) {
    localStorage.setItem('colunasInvisiveisRelatorios', JSON.stringify({ ...colunas, coberturaEstoqueLinha: [] }))
    colunas = JSON.parse(localStorage.getItem('colunasInvisiveisRelatorios'))
  }

  // confirma as colunas
  $('#btnConfirmarColunas').on('click', async function () {
    try {
      $.LoadingOverlay('show');

      const novasColunas = retornaNovasColunasInvisiveis();

      if (controleColunas == 'grupo') {
        localStorage.setItem('colunasInvisiveisRelatorios', JSON.stringify({ ...colunas, coberturaEstoqueGrupo: novasColunas }))

        $('#tabelaRelCoberturaEstoque').DataTable().columns().visible(true);
        // $('#tabelaRelCoberturaEstoque').DataTable().columns(novasColunas).visible(false);

        $('#tabelaRelCoberturaEstoque').DataTable().columns().every(
          function () {
            if ((novasColunas).indexOf(this.dataSrc()) != -1) {
              this.visible(false);
            }
          }
        );
      } else if (controleColunas == 'etiqueta') {
        localStorage.setItem('colunasInvisiveisRelatorios', JSON.stringify({ ...colunas, coberturaEstoqueEtiqueta: novasColunas }))

        $('#tabelaRelCoberturaEstoque').DataTable().columns().visible(true);
        // $('#tabelaRelCoberturaEstoque').DataTable().columns(novasColunas).visible(false);

        $('#tabelaRelCoberturaEstoque').DataTable().columns().every(
          function () {
            if ((novasColunas).indexOf(this.dataSrc()) != -1) {
              this.visible(false);
            }
          }
        );
      } else {
        localStorage.setItem('colunasInvisiveisRelatorios', JSON.stringify({ ...colunas, coberturaEstoqueLinha: novasColunas }))

        $('#tabelaRelCoberturaEstoque').DataTable().columns().visible(true);
        // $('#tabelaRelCoberturaEstoque').DataTable().columns(novasColunas).visible(false);

        $('#tabelaRelCoberturaEstoque').DataTable().columns().every(
          function () {
            if ((novasColunas).indexOf(this.dataSrc()) != -1) {
              this.visible(false);
            }
          }
        );
      }

    } finally {
      $.LoadingOverlay('hide');
      $('#modal-ColunasVisiveis').modal('hide');
    }
  })

  $('#btnFiltros').on('click', async function () {
    $('#modal-filtros').modal('show');
  });

  await preencheOrdenacaoTela('CoberturaEstoqueGrupo');

  $('#checkGrupo').on('change', async function () {
    $('#txtOrdem').empty();
    if ($('#checkGrupo').prop('checked')) {
      await preencheOrdenacaoTela('CoberturaEstoqueGrupo');
    } else {
      await preencheOrdenacaoTela('CoberturaEstoque');
    }
  });

  $("#radioProduto, #radioMaterial").on("change", function () {
    const pesquisaProduto = $("#radioProduto").prop("checked");
    if (pesquisaProduto) {
      $("#CodigoInfoTour").removeClass("d-none");
      $("#divMaterial").addClass("d-none");
      $("#ModeloInfoTour").removeClass("d-none");
      $("#EtiquetaInfoTour").removeClass("d-none");
      $('#optEtiqueta').removeClass('d-none')
      $("#GrupoPAInfoTour").removeClass("d-none");
      $("#GrupoMAInfoTour").addClass("d-none");
      $("#txtGrupoPA").empty().trigger('change');
      $("#txtGrupoMA").empty().trigger('change');
    } else {
      $("#CodigoInfoTour").addClass("d-none");
      $("#divMaterial").removeClass("d-none");
      $("#txtModelo").empty().trigger('change');
      $("#ModeloInfoTour").addClass("d-none");
      $("#txtEtiqueta").empty().trigger('change');
      $("#EtiquetaInfoTour").addClass("d-none");
      $('#optEtiqueta').addClass('d-none')
      $('#selectGrupo').val('GRUPO')
      $("#GrupoPAInfoTour").addClass("d-none");
      $("#GrupoMAInfoTour").removeClass("d-none");
      $("#txtGrupoPA").empty().trigger('change');
      $("#txtGrupoMA").empty().trigger('change');
    }
  });

  adicionarConteudoModal(
    'Cobertura de Estoque', [
    {
      tipo: 'paragrafo',
      valor: 'Quando tratamos de Cobertura, falamos em MESES.'
    },
    {
      tipo: 'paragrafo',
      valor: 'Este relatório é essencial para a gestão, para garantir que se tenha um mix e quantidades saudáveis em estoque, sem inchar e sem faltar. ' +
        'A base de cálculo é uma cobertura de 2,5 (meses). Isto significa que em relação ao volume de vendas do período dos últimos 30 dias do ano anterior,  ' +
        'é necessário ter 2x e meia esse volume em estoque. O relatório ainda apresenta um PLUS na visão, que gera todas as demandas de Compras e/ou Produção ' +
        'perante o histórico de venda do cliente.',
    },
    {
      tipo: 'paragrafo',
      valor: 'Importante frisar 4 pontos:'
    },
    {
      tipo: 'lista',
      itens: [
        'Cobertura de Estoque sempre se analisa por Grupo, Linha ou Etiqueta(Gênero).',
        'Este relatório não abre por referência pois poderá resultar distorção nas referências do ano anterior contra o ano atual.',
        'Cobertura abaixo de 1,8 significa "Atenção" em relação a demanda de Compra e/ou Produção.',
        'Cobertura alta, acima de 3 significa "Atenção", pois o estoque está inchado/alto.'
      ]
    },
  ]
  );

  const filtroDeposito = await buscaDepositoEmpresaUsuario();

  componenteFiltro('grupoPA', true);
  componenteFiltro('grupoMA', true);
  componenteFiltro('linha', true);
  componenteFiltro('etiqueta', true);
  componenteFiltro('produto', true);
  componenteFiltro('colecao', true);
  componenteFiltro('modelo', true);
  componenteFiltro('depositoUsuario', true);
  componenteFiltro('tipoVenda', true);
  componenteFiltro('material', true);

  $('#btnLimparFiltros').on('click', function () {
    $('#txtProduto').empty().trigger('change');
    $('#txtMaterial').empty().trigger('change');
    $('#txtColecao').empty().trigger('change');
    $('#txtModelo').empty().trigger('change');
    $('#txtGrupoPA').empty().trigger('change');
    $('#txtGrupoMA').empty().trigger('change');
    $('#txtEtiqueta').empty().trigger('change');
    $('#txtLinha').empty().trigger('change');
    $('#cbCobertura').val('2,50');
    $('#selectGrupo').val('GRUPO');
    $('#txtOrdem').val('0');
    $('#txtTipoVenda').empty().trigger('change');
  });

  const parametrosVenda = await BuscaParametrosVenda()
  $('#radioMaterial').prop('checked', parametrosVenda[17] == '1').trigger('change')

  retornaHintRelatorio('btnImprimir', 'CoberturaEstoqueGrupoResumido')

  $('#btnImprimir').on('click', async function () {
    try {
      $.LoadingOverlay('show');
      try {
        const url = '/sisplan/impressao/v1/coberturaestoque?';
        const filtros = await retornaFiltros();

        if (filtros.venda_de == '') {
          msgAlerta('Data não informada ou inválida');
          return;
        }

        const params = `&GRUPO=${filtros.grupo}`+
        `&ETIQUETA=${filtros.etiqueta}`+
        `&LINHA=${filtros.linha}`+
        `&COLECAO=${filtros.colecao}`+
        `&MODELO=${filtros.modelo}`+
        `&EMPRESAS_FILTRO=${filtros.empresas}`+
        `&CODIGO=${filtros.codigo}`+
        `&ORDERBY=${filtros.orderby}`+
        `&OPCAORELATORIO=${$('#txtOrdem').val()}`+
        `&COBERTURA_POR=${filtros.filtro_por}`+
        `&COBERTURA=${filtros.cobertura}`+
        `&EMITIDO=${filtros.emitido}`+
        `&PENDENTE=${filtros.pendente}`+
        `&AGRUPADO=${filtros.agrupado}`+
        `&DEVOLVIDO=${filtros.devolvido}`+
        `&CANCELADO=${filtros.cancelado}`+
        `&DEPOSITO=${filtros.deposito}`+
        `&TIPO_VENDA=${filtros.tipovenda}`+
        `&TIPO_ITEM=${filtros.tipoItem}`+
        `&BUSCA=${filtros.busca}`;

        let arquivo = await GeraRelatorio(`${url + params}&`, 'POST', 100000, false);
        if (arquivo != undefined) {
          window.open(`${BASE_URI}/relatorios_api/pdf/${arquivo}`, '_blank');
          await limparRelatorios();
        }

      } catch (error) {
        console.error(error);
      }
    } finally {
      $.LoadingOverlay('hide');
    }
  });

  async function retornaFiltros() {
    let dep = await formataListas($('#txtDepositoUsuario').val().toString());

    if (dep == '') {
      dep = filtroDeposito;
    }

    const pesquisaProduto = $("#radioProduto").prop("checked");
    const filtros = {
      colecao: await formataListas($('#txtColecao').val().toString()),
      etiqueta: await formataListas($('#txtEtiqueta').val().toString()),
      grupo: pesquisaProduto ? await formataListas($('#txtGrupoPA').val().toString()) : await formataListas($('#txtGrupoMA').val().toString()),
      linha: await formataListas($('#txtLinha').val().toString()),
      codigo: pesquisaProduto ? await formataListas($('#txtProduto').val().toString()) : await formataListas($('#txtMaterial').val().toString()),
      modelo: await formataListas($('#txtModelo').val().toString()),
      deposito: dep,
      empresas: $('.empresa_selecionada:checked').toArray().length > 0 ? $('.empresa_selecionada:checked').toArray().map(input => input.id.substring(input.id.indexOf('-') + 1, input.id.length))
        : [getCookie('emp_id')],
      cobertura: $('#cbCobertura').val(),
      filtro_por: $('#selectGrupo').val(),
      emitido: $('#cbEmitido').prop('checked'),
      pendente: $('#cbPendente').prop('checked'),
      agrupado: $('#cbAgrupado').prop('checked'),
      devolvido: $('#cbDevolvido').prop('checked'),
      cancelado: $('#cbCancelado').prop('checked'),
      tipovenda: await formataListas($('#txtTipoVenda').val().toString()),
      tipoItem: pesquisaProduto ? "PRODUTO" : "MATERIAL",
      orderby: listaOrdenacao,
      busca: $('#rdVenda').prop('checked') == true ? 'V' : 'F'
    }
    return filtros
  };

  function adicionaFiltrosCard(data) {
    let card = '<div class="form-row col-12">';
    if (data.codigo != '') {
      card += `<h6 class="ml-3"><b><u>Produto:</u></b>
        ${data.codigo}
        </h6>`
    }
    if (data.grupo != '') {
      card += `<h6 class="ml-3"><b><u>Grupo:</u></b>
      ${data.grupo}
      </h6>`
    }
    if (data.colecao != '') {
      card += `<h6 class="ml-3"><b><u>Coleção:</u></b>
      ${data.colecao}
      </h6>`
    }
    if (data.etiqueta != '') {
      card += `<h6 class="ml-3"><b><u>Etiqueta:</u></b>
      ${data.etiqueta}
      </h6>`
    }
    if (data.linha != '') {
      card += `<h6 class="ml-3"><b><u>Linha:</u></b>
      ${data.linha}
      </h6>`
    }
    card += `</div>`;
    if (data.codigo != '' || data.grupo != '' || data.colecao != '' || data.etiqueta != '' || data.linha != '') {
      $('#card-filtros').append(card);
      $('#card-invisivel').removeClass('d-none');
    }
  }

  function retornaDescricoesFiltros() {
    const v = {
      codigo: pegaDescricao('#txtCodigo'),
      grupo: pegaDescricao('#txtGrupo'),
      colecao: pegaDescricao('#txtColecao'),
      etiqueta: pegaDescricao('#txtEtiqueta'),
      linha: pegaDescricao('#txtLinha')
    }

    return v;
  }

  $('#btnConsultar').on('click', async function () {
    try {
      $.LoadingOverlay('show');
      try {
        Graficos.limpaGrafico(['graficoRelCoberturaEstoque', 'graficoRelCoberturaEstoque1']);
        if ($.fn.DataTable.isDataTable('#tabelaRelCoberturaEstoque')) {
          $('#tabelaRelCoberturaEstoque').DataTable().destroy();
          $('#tabelaRelCoberturaEstoque').empty();
        };

        let colunasAlinharDireita = [];
        let dataSetCols = [];
        const url = '/sisplan/impressao/v1/coberturaestoque?';
        const filtros = await retornaFiltros();
        if (filtros.venda_de == '') {
          msgAlerta('Data não informada ou inválida');
          return;
        }

        $('#card-filtros').empty();
        $('#card-invisivel').addClass('d-none');

        // SELL IN+ESTOQUE / VENDAS.
        const params = `GRUPO=${filtros.grupo}&ETIQUETA=${filtros.etiqueta}&LINHA=${filtros.linha}&COLECAO=${filtros.colecao}&MODELO=${filtros.modelo}`+
                        `&EMPRESAS_FILTRO=${filtros.empresas}&CODIGO=${filtros.codigo}&COBERTURA=${filtros.cobertura}&COBERTURA_POR=${filtros.filtro_por}`+
                        `&EMITIDO=${filtros.emitido}&PENDENTE=${filtros.pendente}&AGRUPADO=${filtros.agrupado}&DEVOLVIDO=${filtros.devolvido}&CANCELADO=${filtros.cancelado}`+
                        `&DEPOSITO=${filtros.deposito}&TIPO_VENDA=${filtros.tipovenda}&TIPO_ITEM=${filtros.tipoItem}&BUSCA=${filtros.busca}`;
        const response = await requisicao('GET', url, params, 60000);

        if (!response) {
          return;
        }

        const jsonStr = await response.json();

        if (jsonStr.length == 0) {
          msgAlerta('Nenhum registro encontrado!');
          return;
        }

        if (response.status != 200) {
          console.error(jsonStr.mensagem);
          return;
        }
        if ($('#checkGrupo').prop('checked')) {
          const descricoes = retornaDescricoesFiltros();
          adicionaFiltrosCard(descricoes);
        }

        const keys = jsonStr.map((key) => {
          return { ...key, NECESSIDADE_COMPRA: `<b>${key.NECESSIDADE_COMPRA}</b>`, COBERTURA: `<b>${(TruncaDecimaisNova(2, key.COBERTURA)).toFixed(2)}</b>` }
        })

        Object.keys(jsonStr[0]).forEach(k => {
          k = { data: k, title: k }

          switch (k.data) {
            case 'QUANTIDADE_VENDIDA':
              k.title = 'VENDAS'
              break;
            case 'NECESSIDADE_COMPRA':
              k.title = 'NECESSIDADE COMPRA'
              break;
            case 'ESTOQUE_ATUAL':
              k.title = 'ESTOQUE ATUAL'
              break;
            default:
              break;
          }

          // if (k.data != 'EMP_ID' && k.data != 'SELL_IN' && k.data != 'ESTOQUE_SELL_IN') {
          dataSetCols.push({
            'title': k.title,
            'data': k.data
          });
          // }
        });

        if ($.fn.DataTable.isDataTable('#tabelaRelCoberturaEstoque')) {
          $('#tabelaRelCoberturaEstoque').DataTable().destroy();
          $('#tabelaRelCoberturaEstoque').empty();
        };

        colunasAlinharDireita = [1, 2, 3, 4];

        $('#tabelaRelCoberturaEstoque').DataTable({
          destroy: true,
          "colReorder": true,
          "data": keys,
          "columns": dataSetCols,
          "columnDefs": [
            {
              targets: colunasAlinharDireita,
              className: "text-right"
            }
          ],
        });

        if ($('#selectGrupo').val() == 'GRUPO') {
          controleColunas = 'grupo'
        } else if ($('#selectGrupo').val() == 'ETIQUETA') {
          controleColunas = 'etiqueta'
        } else {
          controleColunas = 'linha'
        }

        const colunasInvisiveis = JSON.parse(localStorage.getItem('colunasInvisiveisRelatorios'));

        $($('#tabelaRelCoberturaEstoque').find('th')[3]).prop('title', 'Cobertura Ideal é de 2,5.')
        $($('#tabelaRelCoberturaEstoque').find('th')[4]).prop('title', 'Necessidade de Compra para chegar na Cobertura Ideal. Caso houver pedidos em carteira (pendentes) deverá descontar manualmente.')

        // adiciona o botão na tabela e adiciona a função de abrir o modal
        $('#tabelaRelCoberturaEstoque_length').prepend('<button class="buttonColVis" id="buttonColVis"><i class="fas fa-cogs"></i></button>');
        $('#tabelaRelCoberturaEstoque_length').prepend('<button class="buttonExcel" id="buttonExcel"><i class="fas fa-file-excel"></i></button>');

        $('#buttonColVis').on('click', async function () {
          $.LoadingOverlay('show');
          $('#modal-ColunasVisiveis').modal('show');
          $.LoadingOverlay('hide');
        })

        $('#buttonExcel').on('click', async function () {
          const url = '/sisplan/impressao/v1/coberturaestoque?';
          const filtros = await retornaFiltros();
          if (filtros.venda_de == '') {
            msgAlerta('Data não informada ou inválida');
            return;
          }
          const formataCampos = montaComandosCampos();
          const params = `GRUPO=${filtros.grupo}&ETIQUETA=${filtros.etiqueta}&LINHA=${filtros.linha}&COLECAO=${filtros.colecao}&MODELO=${filtros.modelo}`+
                          `&EMPRESAS_FILTRO=${filtros.empresas}&CODIGO=${filtros.codigo}&COBERTURA=${filtros.cobertura}&COBERTURA_POR=${filtros.filtro_por}`+
                          `&EMITIDO=${filtros.emitido}&PENDENTE=${filtros.pendente}&AGRUPADO=${filtros.agrupado}&DEVOLVIDO=${filtros.devolvido}&CANCELADO=${filtros.cancelado}`+
                          `&ORDERBY=${filtros.orderby}&DEPOSITO=${filtros.deposito}&TIPO_VENDA=${filtros.tipovenda}&TIPO_ITEM=${filtros.tipoItem}&BUSCA=${filtros.busca}`;
          await exportaCSV(url, params, false, null, 'Relatório de Cobertura de Estoque', '#tabelaRelCoberturaEstoque', formataCampos);
        })

        $('#buttonColVis').prop('title', 'Configurar colunas')
        $('#buttonExcel').prop('title', 'Exportar CSV')

        if (controleColunas == 'grupo') {
          $('#tabelaRelCoberturaEstoque').DataTable().columns().every(
            function () {
              if ((colunasInvisiveis.coberturaEstoqueGrupo).indexOf(this.dataSrc()) != -1) {
                this.visible(false);
              }
            }
          )
        } else if (controleColunas == 'etiqueta') {
          $('#tabelaRelCoberturaEstoque').DataTable().columns().every(
            function () {
              if ((colunasInvisiveis.coberturaEstoqueEtiqueta).indexOf(this.dataSrc()) != -1) {
                this.visible(false);
              }
            }
          )
        } else {
          $('#tabelaRelCoberturaEstoque').DataTable().columns().every(
            function () {
              if ((colunasInvisiveis.coberturaEstoqueLinha).indexOf(this.dataSrc()) != -1) {
                this.visible(false);
              }
            }
          )
        }

        $('#tabelaRelCoberturaEstoque th').on('click', function () {
          listaOrdenacao = adicionaOrdenacao(
            retornaDataSrcColuna($('#tabelaRelCoberturaEstoque'), $(this)),
            listaOrdenacao
          );
        });

        const dados = $('#tabelaRelCoberturaEstoque').DataTable().data().toArray();

        dados.forEach(obj => {
          obj.COBERTURA = parseFloat(obj.COBERTURA.replace('<b>', '').replace('</b>', ''));
          obj.NECESSIDADE_COMPRA = parseFloat(obj.NECESSIDADE_COMPRA.replace('<b>', '').replace('</b>', ''));
        });

        Graficos.criarGrafico({
          container: 'graficoRelCoberturaEstoque',
          tipo: 'column',
          dados: dados,
          nomeSerie: 'Cobertura',
          colunasAgrupamento: ['GRUPO'],
          colunasValor: ['COBERTURA'],
          title: 'Top 15 grupos com maior cobertura de estoque',
          formatarValor: (value) => {
            return value;
          },
          qtdeRegistros: 15
        })

        Graficos.criarGrafico({
          container: 'graficoRelCoberturaEstoque1',
          tipo: 'column',
          dados: dados,
          nomeSerie: 'Necessidade',
          colunasAgrupamento: ['GRUPO'],
          colunasValor: ['NECESSIDADE_COMPRA'],
          title: 'Top 15 grupos com maior necessidade de compra',
          formatarValor: (value) => {
            return value;
          },
          qtdeRegistros: 15
        })
        // $('#tabelaRelCoberturaEstoque').DataTable().columns(colunasInvisiveis.coberturaEstoque ?? []).visible(false);
        // adicionaColunas(dataSetCols, colunasInvisiveis.coberturaEstoque ?? [])
        if ($("#txtOrdem option").toArray().length > 0) {
          retornaHintRelatorio('btnImprimir', 'CoberturaEstoque' + $('#selectGrupo').val() + $('#txtOrdem option').toArray().map(map => { return [map.selected, $(map).text()] }).filter(filter => filter[0] == true)[0][1].replaceAll(' ', ''))
        }
      } catch (error) {
        console.error(error);
      }
    } finally {
      $.LoadingOverlay('hide');
      $('#modal-filtros').modal('hide');
    }
  });

  function montaComandosCampos() {
    let retorno;
    retorno = 'dados = dados.map((key) => { \n' +
      `let v1 = key.COBERTURA 
      if (typeof v1 == 'string') {
      v1 = parseFloat(v1.replace(".", "").replace(",", ".")).toFixed(2)
      } else {
      v1 = parseFloat(v1).toFixed(2) } ` +
      'return {...key, COBERTURA: v1 } \n' +
      '}) \n';

    return retorno
  }

  $('#modal-ColunasVisiveis').on('show.bs.modal', function () {
    const cols = [];

    let colunasInvisiveis = JSON.parse(localStorage.getItem('colunasInvisiveisRelatorios'));

    if (controleColunas == 'grupo') {
      $('#tabelaRelCoberturaEstoque').DataTable().columns().every(function () {
        cols.push({
          'title': $(this.header()).text(),
          'data': this.dataSrc()
        })
      });
      adicionaColunas(cols, colunasInvisiveis.coberturaEstoqueGrupo ?? []);
    } else if (controleColunas == 'etiqueta') {
      $('#tabelaRelCoberturaEstoque').DataTable().columns().every(function () {
        cols.push({
          'title': $(this.header()).text(),
          'data': this.dataSrc()
        })
      });
      adicionaColunas(cols, colunasInvisiveis.coberturaEstoqueEtiqueta ?? []);
    } else {
      $('#tabelaRelCoberturaEstoque').DataTable().columns().every(function () {
        cols.push({
          'title': $(this.header()).text(),
          'data': this.dataSrc()
        })
      });
      adicionaColunas(cols, colunasInvisiveis.coberturaEstoqueLinha ?? []);
    }
  })

  $('#btnSelecionarEmpresas').on('click', function () {
    carregaEmpresasDisponiveis();
  });

  $('#tutorial').on('click', function () {
    const driver = new Driver({
      doneBtnText: 'Sair',
      closeBtnText: 'Fechar',
      nextBtnText: 'Próximo',
      prevBtnText: 'Anterior',
      allowClose: false
    });
    driver.defineSteps([{
      element: '#btnFiltros',
      popover: {
        title: 'Botão Filtros',
        description: 'Clique aqui para abrir os filtros padrões da tela.',
        position: 'right'
      }
    },
    {
      element: '#btnImprimir',
      popover: {
        title: 'Botão Imprimir',
        description: 'Clique aqui para Imprimir um relatório.',
        position: 'right'
      }
    },
    {
      element: '#tabelaRelCoberturaEstoque',
      popover: {
        title: 'Tabela',
        description: 'Aqui estão os dados dos produtos Filtrados.',
        position: 'top'
      }
    }
    ]);
    driver.start();
  });
});