$(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');
    }
  });

  const utilizaStatus = await CopiaParametro('VENDA', 37) == 1;
  if (utilizaStatus) {
    $('#statusContainer').removeClass('d-none')
  } else {
    $('#statusContainer').addClass('d-none')
  }

  $("#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');
      $('#optCategoria').removeClass('d-none');
      $('#optTipoProduto').removeClass('d-none');
      $('#optEtiqueta').removeClass('d-none');
      $("#GrupoPAInfoTour").removeClass("d-none");
      $("#GrupoMAInfoTour").addClass("d-none");
      $("#txtGrupoPA").empty().trigger('change');
      $("#txtGrupoMA").empty().trigger('change');
      $("#categoria").removeClass("d-none");
      $("#tipoProduto").removeClass("d-none");
    } 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');
      $('#optTipoProduto').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');
      $("#categoria").addClass("d-none");
      $("#tipoProduto").addClass("d-none");
    }
  });

  $('#rdVenda, #rdFiscal').on('change', function () {
    $('#txtStatus').empty().trigger('change');

    if ($('#rdVenda').is(':checked') && utilizaStatus) {
      $('#statusContainer').removeClass('d-none')
    } else {
      $('#statusContainer').addClass('d-none')
    }
  });

  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, Etiqueta(Gênero), Coleção, Marca, Categoria ou Tipo de Produto.',
        '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);
  componenteFiltro('marca', true);
  componenteFiltro('categoriaProd', true, true, "Categoria");
  componenteFiltro('tipoProduto', true);
  componenteFiltro('status', true, true, 'Status', [`TIPO = 'VEN'`])

  $('#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');
    $('#txtStatus').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}` +
          `&STATUS=${filtros.status}` +
          `&TIPO_ITEM=${filtros.tipoItem}` +
          `&MARCA=${filtros.marca}` +
          `&CATEGORIA=${filtros.categoria}` +
          `&TIPOPRODUTO=${filtros.tipoProduto}` +
          `&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(),
      marca: await formataListas($('#txtMarca').val().toString()),
      categoria: await formataListas($('#txtCategoria').val().toString()),
      tipoProduto: await formataListas($('#txtTipoProduto').val().toString()),
      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',
      status: await formataListas($('#txtStatus').val().toString())
    }
    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}&STATUS=${filtros.status}&TIPO_ITEM=${filtros.tipoItem}&MARCA=${filtros.marca}&CATEGORIA=${filtros.categoria}&TIPOPRODUTO=${filtros.tipoProduto}&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}&STATUS=${filtros.status}&TIPO_ITEM=${filtros.tipoItem}&MARCA=${filtros.marca}` +
            `&CATEGORIA=${filtros.categoria}&TIPOPRODUTO=${filtros.tipoProduto}&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();
  });
});