$('#tutorial').on('click', function () {
  $('#geral-tab').trigger('click');
  $(document).ready(async function () {
    const driver = new Driver({
      doneBtnText: 'Sair',
      closeBtnText: 'Fechar',
      nextBtnText: 'Próximo',
      prevBtnText: 'Anterior',
      allowClose: false,
      onHighlightStarted: (Element) => {
        if (Element.node.id == 'geral') {
          if (!$('#DadosGerais').hasClass('show'));
          $('#DadosGerais').collapse('show');
        }
      },
    });

    driver.defineSteps([{
      element: '#geral',
      popover: {
        title: 'Cadastro Geral',
        description: 'Clique aqui para abrir a aba de cadastro Geral.',
        position: 'top'
      }
    },
    {
      element: '#DadosGerais',
      popover: {
        title: 'Dados de Cadastro Geral',
        description: 'Esses são os campos que você informará os dados gerais de cadastro.',
        position: 'top'
      }
    },
    {
      element: '#txtCodigo',
      popover: {
        title: 'Campos Obrigatórios',
        description: 'Esse é um campo obrigatório, para identificá-los, você verá um * ao lado do nome.',
        position: 'top'
      }
    },
    {
      element: '#txtDescricao',
      popover: {
        title: 'Campos Obrigatórios',
        description: 'Esse é um campo obrigatório, para identificá-los, você verá um * ao lado do nome.',
        position: 'top'
      }
    },
    {
      element: '#txtTabelaPreco',
      popover: {
        title: 'Campos Obrigatórios',
        description: 'Esse é um campo obrigatório, para identificá-los, você verá um * ao lado do nome.',
        position: 'top'
      }
    },
    {
      element: '#dataIni',
      popover: {
        title: 'Campos Obrigatórios',
        description: 'Esse é um campo obrigatório, para identificá-los, você verá um * ao lado do nome.',
        position: 'top'
      }
    },
    {
      element: '#dataFim',
      popover: {
        title: 'Campos Obrigatórios',
        description: 'Esse é um campo obrigatório, para identificá-los, você verá um * ao lado do nome.',
        position: 'top'
      }
    },
    {
      element: '#divProduto',
      popover: {
        title: 'Incluir Produto',
        description: 'Aqui você pode incluir um produto.',
        position: 'top'
      }
    },
    {
      element: '#tipos',
      popover: {
        title: 'Tipo',
        description: 'Aqui você seleciona o tipo de regra.',
        position: 'top'
      }
    },
    {
      element: "#btnVoltar",
      popover: {
        title: "Botão Voltar",
        description:
          "Ao clicar nesse botão você retorna para a tela de consulta.",
        position: "left",
      },
    },
    {
      element: '#btnGravar',
      popover: {
        title: 'Botão Gravar',
        description: 'Ao clicar nesse botão você grava os dados inseridos.',
        position: 'left'
      }
    }
    ]);

    driver.start();
  });
});


$(document).ready(async function () {
  await buscaIndice()
  await buscaTributacao()

  if ($('#tabCadIndice').hasClass('active')) {
    $("#tabelaIndice").DataTable().columns.adjust().draw(false);
  }

  if ($('#tabCadTributacao').hasClass('active')) {
    $("#tabelaTributacao").DataTable().columns.adjust().draw(false);
  }

  $('#tabCadIndices').trigger('click');
  $('#tabCadTributacao').trigger('click');
  $('#tabCadMarkup').trigger('click');

  $('#tabCadMarkup').on('click', async function () {
    $('#divCadMarkup').removeClass('d-none');
    $('#divCadIndices').addClass('d-none');
    $('#divCadTributacao').addClass('d-none');
  })

  $('#tabCadIndices').on('click', async function () {
    $('#divCadMarkup').addClass('d-none');
    $('#divCadIndices').removeClass('d-none');
    $('#divCadTributacao').addClass('d-none');
  })

  $('#tabCadTributacao').on('click', async function () {
    $('#divCadIndices').addClass('d-none');
    $('#divCadMarkup').addClass('d-none');
    $('#divCadTributacao').removeClass('d-none');
  })

  $('#btnLimpaDolar').on('click', function () { $('#txtDolar').val('') })
  $('#btnLimpaIndice').on('click', function () { $('#txtIndices').val('') })
  $('#btnLimpaEuro').on('click', function () { $('#txtEuro').val('') })
  $('#btnLimpaFixo').on('click', function () { $('#txtFixo').val('') })

  $('#txtIndice').autocompleta(1, `JSON={ "tabela":"regiao", "camposSelect":[ "regiao chave", "descricao"], "where": null}`);
  $('#btnIndice').pesquisa('#txtIndice', 'CODIGO', 'DESCRICAO', `/sisplan/funcoes/v1/pesquisa?JSON={ "tabela":"CAD_MARKUP", "camposSelect":[ "CODIGO", "DESCRICAO"]}`, 'Pesquisa Índice', 'CAD_MARKUP');
  $('#btnLimpaIndice').on('click', function () {
    $('#txtIndice').val('');
  });

  //Indice
  async function buscaIndice() {
    try {
      $.LoadingOverlay("show");
      let response = await requisicao('GET', '/Sisplan/Funcoes/V1/pesquisa?', `JSON={ "tabela":"INDICE_PRECO", "camposSelect":[ "CODIGO", "DESCRICAO", "TIPO"], "where": ["1=1"]}`, null);


      if (!response) {
        $.LoadingOverlay("hide");
        return;
      }

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

      $('#tabelaIndice').DataTable({
        destroy: true,
        lengthChange: false,
        serverside: 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"
          }
        },

        "autoWidth": true,
        "data": jsonStr.RESULT[0],
        "columns": [{
          "data": "CODIGO"
        },
        {
          "data": "DESCRICAO"
        },
        {
          "data": "TIPO"
        }]
      });

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

  $("#tabelaIndice tbody").on("click", "tr", function () {
    $("#tabelaIndice")
      .dataTable()
      .$("tr.selected")
      .removeClass("selected");
    $(this).addClass("selected");
  });

  $('#btnGravaIndice').on('click', async function () {
    $.LoadingOverlay('show');
    try {
      const indice = {
        CODIGO: pegaChave('#txtIndice'),
        DESCRICAO: pegaDescricao('#txtIndice'),
        TIPO: $('#selectTipoIndice').val()
      }

      const response = await requisicao('POST', '/sisplan/markup/v1/indice/', `JSON=${JSON.stringify(indice)}`, 15000);
      if (!response) {
        return;
      }
    } catch (error) {
      console.log(error);
    } finally {
      $.LoadingOverlay('hide');
    }
  });

  $('#btnExcluirIndice').on('click', async function () {
    $.LoadingOverlay('show');
    try {

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

  //Tributacao
  async function buscaTributacao() {
    try {
      $.LoadingOverlay("show");
      let response = await requisicao('GET', '/Sisplan/Funcoes/V1/pesquisa?', `JSON={ "tabela":"PRECO_PRAZO", "camposSelect":["DOLAR", "FIXO", "INDICE", "EURO", "ID_PRECO"], "where": ["1=1"]}`, null);

      if (!response) {
        return;
      }

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

      $('#tabelaTributacao').DataTable({
        destroy: true,
        lengthChange: false,
        serverside: 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"
          }
        },

        "autoWidth": true,
        "data": jsonStr.RESULT[0],
        "columns": [{
          "data": "DOLAR"
        },
        {
          "data": "FIXO"
        },
        {
          "data": "INDICE"
        },
        {
          "data": "EURO"
        },
        {
          "data": "ID_PRECO"
        }]
      });

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

  $('#btnGravarTributacao').on('click', async function () {
    $.LoadingOverlay('show')
    try {
      let tributacao = {
        DOLAR: $('#txtDolar').val(),
        INDICE: $('#txtIndiceTrib').val(),
        EURO: $('#txtEuro').val(),
        FIXO: $('#txtFixo').val(),
        COFINS: $('#cbCOFINS').is(':checked') ? 'S' : 'N',
        ICMS: $('#cbICMS').is(':checked') ? 'S' : 'N',
        IPI: $('#cbIPI').is(':checked') ? 'S' : 'N',
        PIS: $('#cbPIS').is(':checked') ? 'S' : 'N',
      };

      let response = await await requisicao('POST', '/Sisplan/markup/V1/tributacao?', `JSON=${JSON.stringify(tributacao)}`, 15000);

      if (!response) {
        return;
      }

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

      await buscaTributacao();

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

  $("#tabelaTributacao tbody").on("click", "tr", function () {
    $("#tabelaTributacao")
      .dataTable()
      .$("tr.selected")
      .removeClass("selected");
    $(this).addClass("selected");
  });

  $('#btnExcluirTrib').on('click', async function () {
    $.LoadingOverlay('show');
    try {
      let data = {}
      let tr = $('#tabelaTributacao tr.selected')[0];
      data.ID_PRECO = $('#tabelaTributacao').DataTable().row($(tr)).data().ID_PRECO;

      let response = await requisicao('DELETE', '/Sisplan/markup/V1/tributacao?', `JSON=${JSON.stringify(data)}`, 15000);

      if (!response) {
        return;
      }

      if (response.status == 200) {
        let tr = $('#tabelaTributacao tr.selected')[0];
        const data = $("#tabelaTributacao").DataTable().row($(tr));
        data.remove().draw(false);
      }
    } catch (err) {
      console.log(err)
    } finally {
      $.LoadingOverlay('hide');
    }
  })

  $('#tabelaTributacao').on('click', 'tr', async function () {
    try {
      const data = $('#tabelaTributacao').DataTable().row($(this)).data();

      let response = await requisicao('GET', '/Sisplan/Funcoes/V1/pesquisa?', `JSON={ "tabela":"PRECO_PRAZO", "camposSelect":["COFINS", "ICMS", "IPI", "PIS"], "where": ["1=1", "ID_PRECO='${data.ID_PRECO}'"]}`, null);

      if (!response) {
        return
      }
      let jsonStr = await response.json();

      if (jsonStr.RESULT[0][0].COFINS == 'S') {
        $('#cbCOFINS').prop('checked', true);
      } else {
        $('#cbCOFINS').prop('checked', false);
      }

      if (jsonStr.RESULT[0][0].ICMS == 'S') {
        $('#cbICMS').prop('checked', true);
      } else {
        $('#cbICMS').prop('checked', false);
      }

      if (jsonStr.RESULT[0][0].IPI == 'S') {
        $('#cbIPI').prop('checked', true);
      } else {
        $('#cbIPI').prop('checked', false);
      }

      if (jsonStr.RESULT[0][0].PIS == 'S') {
        $('#cbPIS').prop('checked', true);
      } else {
        $('#cbPIS').prop('checked', false);
      }

      $('#txtDolar').val(data.DOLAR);
      $('#txtEuro').val(data.EURO);
      $('#txtIndiceTrib').val(data.INDICE);
      $('#txtFixo').val(data.FIXO);
      $('#txtId').val(data.PRECO_ID);

    } catch (err) {
      console.log(err);
    }
  });

  function limpaCamposTributacao() {
    $('#txtDolar').val('');
    $('#txtEuro').val('');
    $('#txtIndiceTrib').val('');
    $('#txtFixo').val('');
    $('#cbCOFINS').prop('checked', false);
    $('#cbICMS').prop('checked', false);
    $('#cbIPI').prop('checked', false);
    $('#cbPIS').prop('checked', false);
  }

  $('#btnIncluirTrib').on('click', async function () {
    $("#tabelaTributacao").dataTable().$("tr.selected").removeClass("selected");
    limpaCamposTributacao();
    $('#txtDolar').focus();
  });



































  $('#txtProduto').pesquisa_variosServerside(1, '{ "tabela":"PRODUTO", "camposSelect":[ "CODIGO", "DESCRICAO" ], "where": null}', 'CODIGO', 'DESCRICAO');
  $('#btnProduto').pesquisa_serversideSel('#txtProduto', `{ "tabela":"PRODUTO", "camposSelect":[ "CODIGO", "DESCRICAO"], "where": null}`, 'Pesquisa de Produto');
  $('#btnAProduto').on('click', function () {
    $('#txtProduto').empty().trigger('change');
  });

  $('#txtColecao').autocompleta(1, `JSON={ "tabela":"colecao", "camposSelect":[ "codigo chave", "descricao"], "where": null}`);
  $('#btnColecao').pesquisa('#txtColecao', 'CODIGO', 'DESCRICAO', `/sisplan/funcoes/v1/pesquisa?JSON={ "tabela":"colecao", "camposSelect":[ "codigo", "descricao"]}`, 'Pesquisa de Coleção', 'colecao');
  $('#btnColecao').on('click', function () {
    $('#txtColecao').val('');
  });

  $('#txtSubColecao').autocompleta(1, `JSON={ "tabela":"cadtag", "camposSelect":[ "codigo chave", "descricao"], "where": null}`);
  $('#btnSubColecao').pesquisa('#txtSubColecao', 'CODIGO', 'DESCRICAO', `/sisplan/funcoes/v1/pesquisa?JSON={ "tabela":"cadtag", "camposSelect":[ "codigo", "descricao"]}`, 'Pesquisa de Sub Coleção', 'cadtag');
  $('#btnSubColecao').on('click', function () {
    $('#txtSubColecao').val('');
  });

  $('.select2-selection__rendered').css('max-width', $($('#txtProduto').parent().children()[1]).css('width'));

  $('#tabela-empAcesso').DataTable({
    paging: false,
    filter: false,
    info: false,
    order: true,
    destroy: true,
    scrollY: '180px',
    "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"
      }
    }
  });

  $('#tabela-produtos').DataTable({
    paging: false,
    filter: false,
    info: false,
    order: true,
    destroy: true,
    scrollY: '205px',
    "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"
      }
    },
    "columns": [
      {
        'title': 'CODIGO',
        'data': 'CODIGO'
      },
      {
        'title': 'DESC_PRODUTO',
        'data': 'DESC_PRODUTO'
      },
      {
        'title': 'OPERACAO',
        'data': 'OPERACAO'
      },
      {
        'title': 'PRECO_00',
        'data': 'PRECO_00'
      },
      {
        'title': 'VALOR',
        'data': 'VALOR'
      },
      {
        'title': 'EXCLUIR',
        'data': 'EXCLUIR'
      }
    ]
  });

  $("#txtPrecoProduto").maskMoney({
    decimal: ".",
    thousands: "",
    precision: 2,
  });

  $("#txtValorAdd").maskMoney({
    decimal: ".",
    thousands: "",
    precision: 2,
  });

  $("#txtValorPromo").maskMoney({
    decimal: ".",
    thousands: "",
    precision: 2,
  });

  $("#txtDescontoPromo").maskMoney({
    decimal: ".",
    thousands: "",
    precision: 2,
  });

  await preencheEmpresas();

  let queryString = window.location.href;
  let parametros = queryString.split('/');
  let regra = parametros[parametros.length - 1];

  $('#tabela-empAcesso').on('click', 'td', function () {
    selecionarLinhaTabela('#tabela-empAcesso', 'checkEmpresa', this);
  });

  $('#btnVoltar').on('click', async function () {
    window.location.href = `${BASE_URI}/regrapromocao`;
  });

  $('#msform').validate({
    debug: false,
    ignore: "",
    rules: {
      txtDescricao: { required: true, },
      txtTabelaPreco: { required: true, },
      dataIni: { required: true, },
      dataFim: { required: true, },
    },
    messages: {
      txtDescricao: { required: 'Descrição inválida.', },
      txtTabelaPreco: { required: 'Tabela de preço inválida.', },
      dataIni: { required: 'Data inicial inválida.', },
      dataFim: { required: 'Data final inválida.', },
    },
    errorElement: 'span',
    errorPlacement(error, element) {
      error.addClass('invalid-feedback');
      element.closest('.form-group').append(error);
    },
    highlight(element) {
      $(element).addClass('is-invalid');
    },
    unhighlight(element) {
      $(element).removeClass('is-invalid');
    },
    async submitHandler(form, event) {
      event.preventDefault();
      try {
        $.LoadingOverlay("show");
        try {

          if ($('#tabela-produtos').DataTable().rows().count() == 0) {
            msgAlerta('Favor incluir ao menos um produto a regra.');
            return;
          };
          if ($('#tabela-promo').DataTable().rows().count() == 0) {
            msgAlerta('Favor incluir ao menos uma promoção a regra.');
            return;
          };

          const codigo = regra == 'create' ? await RetornaProximo('REGRA_PROMOCAO', 'REGRA_PROMOCAO', 'REGRA', 4) : regra;

          let empresas = [];
          for (let i = 0; i < $('#tabela-empAcesso').DataTable().rows('.selected').data().length; i++) {
            let dados = $('#tabela-empAcesso').DataTable().rows('.selected').data()[i];
            empresas.push(dados[1].split(' - ')[0]);
          };

          let arrRegras = [];
          for (let i = 0; i < $('#tabela-promo').DataTable().rows().count(); i++) {
            arrRegras.push({
              VALOR: $('#tabela-promo').DataTable().rows(i).data()[0][1],
              DESCONTO: $('#tabela-promo').DataTable().rows(i).data()[0][2],
              CAMPO: '',
              CHAVE: '',
              OPERACAO: ''
            });
          };

          let arrProdutos = [];
          for (let i = 0; i < $('#tabela-produtos').DataTable().rows().count(); i++) {
            arrProdutos.push({
              CODIGO: $('#tabela-produtos').DataTable().rows(i).data()[0].CODIGO,
              TIPO: 'P',
              OPERACAO: $('#tabela-produtos').DataTable().rows(i).data()[0].OPERACAO,
              VALOR: Number($('#tabela-produtos').DataTable().rows(i).data()[0].VALOR)
            });
          };

          const objRegra = {
            CODREGRA: Number(codigo),
            DESC_REGRA: $('#txtDescricao').val(),
            REGIAO: pegaChave('#txtTabelaPreco'),
            DT_INICIAL: `${$("#dataIni").val()}T00:00:00Z`,
            DT_FINAL: `${$("#dataFim").val()}T00:00:00Z`,
            TIPO: $('#checkValorTabela').prop('checked') ? 'V' : 'Q',
            MODELO: 1,
            EMPRESA: empresas,
            REGRA: arrRegras,
            ITENS: arrProdutos
          };

          console.log(objRegra);

          const response = await requisicao('POST', '/sisplan/cadastros/v1/regrapromocao?', '', `JSON=${JSON.stringify(objRegra)}`, 30000);

          if (!response) {
            return;
          };

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

          $.LoadingOverlay("hide");
          toastr.success(
            `Cadastro efetuado com sucesso! Regra: ${codigo}`,
            '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() {
              window.location.href = `${BASE_URI}/regrapromocao`;
            }
          }
          ).css({
            "margin-top": "20%",
            width: "500px",
            "max-width": "500px"
          });
        } catch (error) {
          msgErro(`Não foi possível gravar os dados da regra: ${error}`);
        }
      } finally {
        $.LoadingOverlay('hide');
      }
    }
  });

  // if (regra != '' && regra != 'create') {
  //   try {
  //     $.LoadingOverlay('show');
  //     try {
  //       let dadosRegra = await buscaDadosRegra(regra);

  //       if (dadosRegra == null) {
  //         msgAlerta('Regra não encontrada.');
  //         setTimeout(() => { window.location.href = `${BASE_URI}/regrapromocao`; }, 3000);
  //       }

  //       $('#txtCodigo').val(regra);
  //       $('#txtDescricao').val(dadosRegra[0].DESC_REGRA);
  //       $('#dataIni').val(dadosRegra[0].DT_INICIAL ? dadosRegra[0].DT_INICIAL.slice(0, 10) : '');
  //       $('#dataFim').val(dadosRegra[0].DT_FINAL ? dadosRegra[0].DT_FINAL.slice(0, 10) : '');
  //       insereValor('#txtTabelaPreco', dadosRegra[0].REGIAO, dadosRegra[0].DESCRICAO);

  //       let empresasRegra = dadosRegra[0].EMPRESA.split(',');
  //       empresasRegra.map((empRegra) => {
  //         $('#tabela-empAcesso').DataTable().rows().data().map((empresa, index) => {
  //           if (empRegra == empresa[1].split(' - ')[0]) {
  //             $($('.checkEmpresa')[index]).prop('checked', true);
  //             $($("table#tabela-empAcesso tr")[index + 1]).addClass("selected");
  //           }
  //         });
  //       });

  //       if (dadosRegra[0].TIPO == 'Q') {
  //         $('#checkQuantidade').prop('checked', true);
  //         alteraCheck();
  //       };

  //       dadosRegra.map((regra) => {
  //         adicionaPromocao(
  //           regra.SEQ,
  //           regra.VALOR,
  //           regra.DESCONTO
  //         );
  //       });

  //       let dadosProdutos = await buscaProdutosRegra(regra);
  //       if (dadosProdutos == null) {
  //         msgAlerta('Regra não possui produtos cadastrados.');
  //         return;
  //       }

  //       let dataSetCols = [];
  //       let keys = Object.keys(dadosProdutos[0]);

  //       keys.forEach(k => {
  //         dataSetCols.push({
  //           'title': k,
  //           'data': k
  //         });
  //       });

  //       dataSetCols.push({
  //         'title': 'EXCLUIR',
  //         'data': 'EXCLUIR'
  //       });

  //       dataSetCols[5].render = function () {
  //         return retornaBotaoOpcoes();
  //       };

  //       $('#tabela-produtos').DataTable({
  //         paging: false,
  //         filter: false,
  //         scrollY: '205px',
  //         info: false,
  //         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": dadosProdutos,
  //         "columns": dataSetCols
  //       });

  //     } catch (error) {
  //       console.error(error);
  //       msgErro('Erro ao retornar os dados da regra.');
  //     }
  //   } finally {
  //     $.LoadingOverlay('hide');
  //   }
  // }

  $('#btnCarregar').on('click', async function () {
    try {
      $.LoadingOverlay('show');
      if ($('#txtTabelaPreco').val() == '') {
        msgAlerta('Tabela de preço não informada, favor verificar.');
        return;
      }
      $('#tabela-produtos').DataTable().rows().remove().draw(false);
      const considerar = $('#selectConsiderar').val();
      const descricao = $('#txtDescricaoProduto').val();
      const precoAte = $('#txtPrecoProduto').val() != '' ? $('#txtPrecoProduto').val() : '0.00';
      const regiao = pegaChave('#txtTabelaPreco');

      const dados = await retornaProdutos(considerar, descricao, precoAte, regiao);
      if (dados.length == 0) {
        msgAlerta('Nenhum produto encontrado.');
        return;
      }

      let dataSetCols = [];
      let keys = Object.keys(dados[0]);

      keys.forEach(k => {
        dataSetCols.push({
          'title': k,
          'data': k
        });
      });

      dataSetCols.push({
        'title': 'EXCLUIR',
        'data': 'EXCLUIR'
      });

      dataSetCols[5].render = function () {
        return retornaBotaoOpcoes();
      };

      $('#tabela-produtos').DataTable({
        paging: false,
        filter: false,
        scrollY: '205px',
        info: false,
        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,
        "columns": dataSetCols
      });

      $('#txtDescricaoProduto').val('');
      $('#txtPrecoProduto').val('0.00');
    } finally {
      $.LoadingOverlay('hide');
    }
  });

  $('#btnIncluirPromo').on('click', async function () {
    adicionaPromocao(
      $('#tabela-promo').DataTable().rows().count() + 1,
      $('#txtValorPromo').val() != '' ? $('#txtValorPromo').val() : '0.00',
      $('#txtDescontoPromo').val() != '' ? $('#txtDescontoPromo').val() : '0.00'
    );

    $('#txtValorPromo').val('0.00');
    $('#txtDescontoPromo').val('0.00');
  });

  $('#btnRemover').on('click', async function () {
    try {
      $.LoadingOverlay('show');

      $('#tabela-produtos').DataTable().rows().remove().draw(false);

    } finally {
      $.LoadingOverlay('hide');
    }
  });

  // $('#btnIncluir').on('click', async function () {
  //   try {
  //     $.LoadingOverlay('show');
  //     if ((pegaChave('#txtColecao') == '') && (pegaChave('#txtSubColecao') == '')) {
  //       if ($('#txtProduto').val() == '') {
  //         msgAlerta('Favor adicionar um produto.');
  //         return;
  //       }
  //       if ($('#txtTabelaPreco').val() == '') {
  //         msgAlerta('Favor adicionar uma tabela de preço.');
  //         return;
  //       }
  //       await validaPrecoProduto();
  //       const listaProduto = $('#txtProduto').val();

  //       for (let i = 0; i < listaProduto.length; i++) {
  //         const dados = $('#tabela-produtos').DataTable().rows().data().toArray();
  //         const codigo = listaProduto[i];
  //         const indice = dados.findIndex((item) => item.CODIGO == codigo);
  //         if (indice != -1) {
  //           msgAlerta('Produto já incluso na regra, impossível continuar!');
  //           return;
  //         }
  //       }
  //       for (let i = 0; i < listaProduto.length; i++) {
  //         let produto = listaProduto[i];
  //         let descricao = await retornaJsonPesquisaPadrao(`{"tabela": "PRODUTO", "camposSelect": ["DESCRICAO"], "where": ["CODIGO = '${listaProduto[i]}'"]}`);
  //         let preco = await retornaPrecoProduto(listaProduto[i], pegaChave('#txtTabelaPreco'));
  //         adicionaProduto(
  //           produto,
  //           descricao[0].DESCRICAO,
  //           preco
  //         );
  //       }
  //     } else {
  //       const colecao = pegaChave('#txtColecao') != '' ? ` AND COLECAO = '${pegaChave('#txtColecao')}'` : '';
  //       const subColecao = pegaChave('#txtSubColecao') != '' ? ` AND CODTAG = '${pegaChave('#txtSubColecao')}'` : '';
  //       const produtos = await retornaJsonPesquisaPadrao(`{"tabela": "PRODUTO", "camposSelect": ["CODIGO, DESCRICAO"], "where": [" 1=1 ${colecao + subColecao}"]}`);

  //       if (produtos) {
  //         for (let i = 0; i < produtos.length; i++) {

  //           let preco = await retornaPrecoProduto(produtos[i].CODIGO, pegaChave('#txtTabelaPreco'));

  //           if (preco != null) {

  //             adicionaProduto(
  //               produtos[i].CODIGO,
  //               produtos[i].DESCRICAO,
  //               preco
  //             );
  //           }
  //         }
  //       }
  //     }
  //   } finally {
  //     $.LoadingOverlay('hide');
  //   }
  //   $('#txtProduto').val('');
  //   $('#txtValorAdd').val('');
  //   $('#txtColecao').val('');
  //   $('#txtSubColecao').val('');
  //   $('#txtProduto').empty().trigger('change');
  // });

  async function validaPrecoProduto() {
    const listaProduto = $('#txtProduto').val();
    const listaProdutoFormatada = [];
    for (let i = 0; i < listaProduto.length; i++) {
      const preco = await retornaPrecoProduto(listaProduto[i], pegaChave('#txtTabelaPreco'));
      if (preco != null) {
        listaProdutoFormatada.push(listaProduto[i]);
      }
    }
    if (listaProdutoFormatada.length > 0) {
      $('#txtProduto').val(listaProdutoFormatada).trigger('change');
    } else {
      $('#txtProduto').empty().trigger('change');
    }
    const listaProdutosSemPreco = listaProduto.filter(produtos => !listaProdutoFormatada.includes(produtos));

    if (listaProdutosSemPreco.length > 0) {
      msgAlerta(`Produto(s) ${listaProdutosSemPreco.toString()} sem preço cadastrado na tabela de preço ${pegaChave('#txtTabelaPreco')}`)
    }
  };

  $('#checkValorTabela, #checkQuantidade').on('change', function () {
    alteraCheck();
  });

  function alteraCheck() {
    if ($('#checkValorTabela').prop('checked')) {
      $('#htmlValor').html('Valor');
      $('#txtValorPromo').prop('placeholder', 'Valor');
    } else {
      $('#htmlValor').html('Quantidade');
      $('#txtValorPromo').prop('placeholder', 'Quantidade');
    }
  }

  async function buscaDadosRegra(regra) {
    try {
      const url = '/Sisplan/Funcoes/v1/pesquisa?';
      const response = await requisicao('GET', url, `JSON={ "tabela":"REGRA_PROMOCAO",
            "camposSelect":["REGRA_PROMOCAO.DESC_REGRA", "REGRA_PROMOCAO.REGIAO", "REGRA_PROMOCAO.DT_INICIAL", "REGRA_PROMOCAO.DT_FINAL", "REGRA_PROMOCAO.EMPRESA",
            "REGRA_PROMOCAO.VALOR", "REGRA_PROMOCAO.DESCONTO", "REGRA_PROMOCAO.TIPO", "REGRA_PROMOCAO.SEQ", "REGRA_PROMOCAO.MODELO", "REGIAO.DESCRICAO"],
            "innerjoin": [{"tabela": "REGIAO", "condicao": "REGRA_PROMOCAO.REGIAO = REGIAO.REGIAO"}],
            "where": ["REGRA = ${regra}"]}`);

      if (!response) {
        return;
      }

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

      if (jsonStr.RESULT[0].length > 0) {
        return jsonStr.RESULT[0];
      }
      return null;


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

  async function buscaProdutosRegra(regra) {
    try {
      const url = '/Sisplan/Funcoes/v1/pesquisa?';
      const response = await requisicao('GET', url, `JSON={ "tabela":"REGRA_PROMOCAOI",
              "camposSelect":["REGRA_PROMOCAOI.CODIGO", "TABPRECO.DESC_PRODUTO", "REGRA_PROMOCAOI.OPERACAO", "TABPRECO.PRECO_00", "REGRA_PROMOCAOI.VALOR"],
              "innerjoin": [
                {"tabela": "TABPRECO", "condicao": "TABPRECO.CODIGO = REGRA_PROMOCAOI.CODIGO AND TABPRECO.REGIAO = '${pegaChave('#txtTabelaPreco')}'"}],
              "where": ["REGRA_PROMOCAOI.REGRA = ${regra}"]}`);

      if (!response) {
        return;
      }

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

      if (jsonStr.RESULT[0].length > 0) {
        return jsonStr.RESULT[0];
      }
      return null;


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

  async function preencheEmpresas() {
    let dataSet = await RetornaEmpresas();
    $('#tabela-empAcesso').DataTable().rows().remove().draw(false);
    for (let i = 0; i < dataSet.length; i++) {
      const empresa = dataSet[i];
      $('#tabela-empAcesso').DataTable().row.add([botaoSelecionarGrid(), `${empresa.EMP_ID} - ${empresa.EMP_NOME} - ${empresa.EMP_PAT}`]).draw(false);
    }
  }

  function adicionaProduto(codigo, descricao, preco) {
    $('#tabela-produtos').DataTable().row.add({
      CODIGO: codigo,
      DESC_PRODUTO: descricao,
      OPERACAO: $('#checkDescPromo').is(':checked') ? 'D' : 'V',
      PRECO_00: preco,
      VALOR: $('#txtValorAdd').val() != '' ? $('#txtValorAdd').val() : '0.00',
      EXCLUIR: retornaBotaoOpcoes()
    }).draw(false);
  }

  function adicionaPromocao(ordem, valor, desconto) {
    $('#tabela-promo').DataTable().row.add([
      ordem,
      valor,
      desconto,
      retornaBotaoOpcoes()
    ]).draw(false);
  }

  $('#tabela-produtos').on('click', '.btn-excluir', async function () {
    $('#tabela-produtos').DataTable().row($(this).parents('tr')).remove().draw(false);
  });

  $('#tabela-promo').on('click', '.btn-excluir', async function () {
    $('#tabela-promo').DataTable().row($(this).parents('tr')).remove().draw(false);
  });

  async function retornaProdutos(considerar, descricao, precoAte, regiao) {
    try {
      const url = '/Sisplan/Funcoes/v1/pesquisa?';

      let sWhere = `REGIAO = '${regiao}'`;
      if ((considerar == '1') && (descricao != '')) {
        sWhere += ` AND DESC_PRODUTO LIKE ('[PERCENTUAL]${descricao}[PERCENTUAL]')`;
      } else if ((considerar == '0') && (descricao != '')) {
        sWhere += ` AND DESC_PRODUTO NOT LIKE ('[PERCENTUAL]${descricao}[PERCENTUAL]')`;
      } if (precoAte > 0) {
        sWhere += ` AND PRECO_00 <= ${precoAte}`;
      }

      const json = encodeURIComponent(`{"tabela":"tabpreco","camposSelect":["CODIGO", "DESC_PRODUTO", "PRECO_00"],"where": ["${sWhere}"]}`);

      const response = await requisicao('GET', url, `JSON=${json}`);

      if (!response) {
        return;
      }

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

      let dados = jsonStr.RESULT[0];
      for (let i = 0; i < dados.length; i++) {
        dados[i].OPERACAO = 'D';
        dados[i].VALOR = '0.00';
      }

      return dados;

    } catch (error) {
      console.error(error);
      msgErro('Erro ao buscar dados do usuário');
    }
  }

  async function retornaPrecoProduto(codigo, regiao) {
    try {
      const url = '/Sisplan/Funcoes/v1/pesquisa?';
      const response = await requisicao('GET', url, `JSON={ "tabela":"tabpreco",
      "camposSelect":["PRECO_00"],
      "where": ["CODIGO = '${codigo}' and REGIAO = '${regiao}'"]}`);

      if (!response) {
        return;
      }

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

      if (jsonStr.RESULT[0].length > 0) {
        return jsonStr.RESULT[0][0].PRECO_00;
      }

      return null;

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

  async function buscaEmpresaUsuario(codigo) {
    try {
      const url = '/Sisplan/Funcoes/v1/pesquisa?';
      const response = await requisicao('GET', url, `JSON={ "tabela":"acesso_empresa", "camposSelect":["EMPRESA"], "where": ["USUARIO = '${codigo}'"]}`);

      if (!response) {
        return;
      }

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


    } catch (error) {
      console.error(error);
      msgErro('Erro ao buscar dados da empresa do usuário');
    }
  }

  $('.collapse').on('shown.bs.collapse', function (e) {
    let clicked = $(document).find(`[href='#${$(e.target).attr('id')}']`);

    clicked
      .parent()
      .find(".fa-angle-right")
      .removeClass("fa-angle-right")
      .addClass("fa-angle-down");
  })

    .on('hidden.bs.collapse', function (e) {
      let clicked = $(document).find(`[href='#${$(e.target).attr('id')}']`);

      clicked
        .parent()
        .find(".fa-angle-down")
        .removeClass("fa-angle-down")
        .addClass("fa-angle-right");
    });

  async function RetornaEmpresas() {
    let _url = `/sisplan/funcoes/v1/pesquisa?`;
    let _params = `JSON={"tabela":"empresa", "camposSelect":[ "EMP_ID", "EMP_NOME", "REPLACE(EMP_PAT, '_', '') EMP_PAT"], "where": null}`;

    try {
      let response = await requisicao('GET', _url, _params, null);

      if (!response) {
        return '';
      }

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

      const arrDados = jsonStr.RESULT[0];
      return arrDados;
    } catch (error) {
      console.error(error);
      msgErro('Não foi possível buscar as empresas.');
      return '';
    }
  }

  function botaoSelecionarGrid() {
    return '<div class="form-check">' +
      '<input type="checkbox" class="align-self-center checkEmpresa" value"">' +
      '</div>';
  };

  function retornaBotaoOpcoes() {
    return '<div class="divBtnOpcoes"> ' +
      '    <button class="botaoOpcoes btn-excluir" type="button"><span class="fas fa-trash-alt" style="color:red"></span></button>  ' +
      '   </div>';
  }
});