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

  // preencheOrdenacaoTela('RelComissaoMeta');

  //Quantidade de linhas das tabelas referente ao tamanho da tela
  const qtdeLinhasTabela = ((screen.width == 1366) && (screen.height == 768)) ? 7 : 17;

  // autocompleta
  // $("#txtVendedor").autocompleta(1, `JSON={ "tabela":"REPRESEN", "camposSelect":[ "CODREP CHAVE", "NOME DESCRICAO"], "where": null}`);
  $('#txtVendedor').pesquisa_variosServerside(1, '{ "tabela":"REPRESEN", "camposSelect":[ "CODREP", "NOME" ], "where": null}', 'CODREP', 'NOME');
  // $("#txtCoordenador").autocompleta(1, `JSON={ "tabela":"REPRESEN", "camposSelect":[ "CODREP CHAVE", "NOME DESCRICAO"], "where": null}`);
  $('#txtCoordenador').pesquisa_variosServerside(1, '{ "tabela":"ENTIDADE", "camposSelect":[ "CODCLI", "NOME" ], "where": null}', 'CODCLI', 'NOME');

  //pesquisa serverside
  // $("#btnVendedor").pesquisa_serverside(['#txtVendedor'], ["CODREP"], ["NOME"], `{"tabela":"REPRESEN", "camposSelect":["CODREP", "NOME"]}`, 'Pesquisa Vendedor');
  $('#btnVendedor').pesquisa_serversideSel('#txtVendedor', `{ "tabela":"REPRESEN", "camposSelect":[ "CODREP", "NOME"], "where": null}`, 'Pesquisa Vendedor');

  // $("#btnCoordenador").pesquisa_serverside(['#txtCoordenador'], ["CODREP"], ["NOME"], `{"tabela":"REPRESEN", "camposSelect":["CODREP", "NOME"]}`, 'Pesquisa Coordenador');
  $('#btnCoordenador').pesquisa_serversideSel('#txtCoordenador', `{ "tabela":"ENTIDADE", "camposSelect":[ "CODCLI", "NOME"], "where": null}`, 'Pesquisa Coordenador');

  //Fazer a limpeza dos campos
  $("#btnLimpaVendedor").on("click", function () {
    $('#txtVendedor').empty().trigger('change');
  });

  $("#btnLimpaCoordenador").on("click", function () {
    $('#txtCoordenador').empty().trigger('change');
  });

  $('#btnLimparFiltros').on('click', async function () {
    $('#txtVendedor').empty().trigger('change');
    $('#txtCoordenador').empty().trigger('change');
    $('#dtInicioDe').val('1200-01-01');
    $('#dtInicioAte').val('2500-12-31');
  });

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

  // $("#btnImprimir").on("click", async function () {
  //   try {
  //     $.LoadingOverlay("show");
  //     try {
  //       const ordem = `&TELA_ORDENACAO=RelComissao&ORDEM_ORDENACAO=${$('#txtOrdem').val()}`;
  //       const url = `/sisplan/impressao/v1/imprimirrelcomissao?`;
  //       const Filtros = await preencheFiltros();
  //       const bImprimeAutomatico = await verificaImprimirAutomatico('RelComissao');
  //       const arquivo = await GeraRelatorio(`${url}${Filtros}${ordem}`, "GET", 100000, false, 'RelComissao');

  //       if (arquivo != undefined) {
  //         if (!bImprimeAutomatico) {
  //           window.open(`${BASE_URI}/relatorios_api/pdf/${arquivo}`, "_blank");
  //         }
  //         await limparRelatorios();
  //       }
  //     } catch (error) {
  //       console.error(error);
  //     }
  //   } finally {
  //     $.LoadingOverlay("hide");
  //   }
  // });

  async function preencheFiltros() {
    try {
      const dtInicioDe = $("#dtInicioDe").val();
      const dtInicioAte = $("#dtInicioAte").val();
      const vendedores = $('#txtVendedor').val();
      const coordenadores = $("#txtCoordenador").val();

      const retorno =
        `VENDEDORES=${vendedores}` +
        `&COORDENADORES=${coordenadores}` +
        `&DTINICIODE=${dtInicioDe}` +
        `&DTINICIOATE=${dtInicioAte}`;
      return retorno;

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

  async function limpaTabela() {
    $('#tabelaComissao').DataTable().destroy().draw(false);
    $('#tabelaComissao').html('<thead></thead><tbody></tbody>');
  }

  async function montaTabelaCoordenadores(coordenadores) {
    if ((!coordenadores) || (coordenadores.length == 0)){
      return;  
    }

    const dataSetCols = [];
    const keys = Object.keys(coordenadores[0]);

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

    $("#tabelaComissaoCoord").DataTable({
      paging: false,
      filter: false,
      info: false,
      order: false,
      destroy: true,
      scrollX: '250px',
      scrollY: '290px',
      // "pageLength": qtdeLinhasTabela,
      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: coordenadores,
      columns: dataSetCols,
      "columnDefs": [
        {
          targets: [6, 7],
          visible: false
        },
        {
          "render": function (data) {
            return parseFloat(data).toLocaleString('pt-br', {
              style: 'currency',
              currency: 'BRL'
            });
          },
          "targets": [3, 4, 8]
        },
        {
          render(data) {
            return parseFloat(data).toLocaleString("pt-BR", {
              maximumFractionDigits: 2,
              minimumFractionDigits: 2
            })+' %';
          },
          targets: [5],
        },
      ],
    });
  }

  function copyAndTransformKeysToUppercase(obj) {
    return Object.keys(obj).reduce((acc, key) => {
      acc[key.toUpperCase()] = obj[key];
      return acc;
    }, {});
  }
  

  async function buscaTabelaComissao() {
    const dataSetCols = [];
    if ($('#tabelaComissao')[0].rows.length > 0) {
      await limpaTabela();
    }
    $('#divTabelaComissao').removeClass('d-none')
    if ($.fn.DataTable.isDataTable('#tabelaComissao')) {
      $('#tabelaComissao').DataTable().destroy();
      $('#tabelaComissao').empty();
    };

    try {
      // const dtInicioDe = $("#dtInicioDe").val();
      // const dtInicioAte = $("#dtInicioAte").val();

      const dtInicioDe = $('#dtInicioDe').val() != '1200-01-01' ? `&DATA_DE='${$('#dtInicioDe').val()}'` : '';
      const dtInicioAte = $('#dtInicioAte').val() != '2500-12-31' ? `&DATA_ATE='${$('#dtInicioAte').val()}'` : '';
      const vendedores = $('#txtVendedor').val().length > 0 ? `&VENDEDORES=${await formataListas($('#txtVendedor').val().toString())}` : '';
      const coordenadores = $('#txtCoordenador').val().length > 0 ? `&COORDENADORES=${await formataListas($('#txtCoordenador').val().toString())}`.trim() : '';

      const filtrosTela = `TESTE=1${vendedores}${coordenadores}${dtInicioDe}${dtInicioAte}`;
      const url = `/sisplan/impressao/v1/consultarelcomissaometa?`;
      const response = await requisicao(
        "GET",
        url,
        filtrosTela,
        null,
        60000
      );

      if (!response) {
        return;
      }

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

      const listaCoordenadores =  jsonStr.comissaoCoordenador.filter(dado => dado.COD_COORD != '').map(dado => copyAndTransformKeysToUppercase(dado));
      await montaTabelaCoordenadores(listaCoordenadores);

      if (jsonStr.comissaoRepresentante.length == 0) {
        msgAlerta("Nenhum registro encontrado!");
        $("#txtVendedor").val();
        $("#txtCoordenador").val();
        return;
      }

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

      
      const retornoTratado = jsonStr.comissaoRepresentante.map(comissao => copyAndTransformKeysToUppercase(comissao));
      const keys = Object.keys(retornoTratado[0]);

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


      $("#tabelaComissao").DataTable({
        paging: false,
        filter: false,
        info: false,
        order: false,
        destroy: true,
        scrollX: '250px',
        scrollY: '290px',
        // "pageLength": qtdeLinhasTabela,
        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: retornoTratado,
        columns: dataSetCols,
        "columnDefs": [
          {
            targets: [6,7],
            visible: false
          },
          {
            "render": function (data) {
              return parseFloat(data).toLocaleString('pt-br', {
                style: 'currency',
                currency: 'BRL'
              });
            },
            "targets": [3, 4, 8]
          },
          {
            render(data) {
              return parseFloat(data).toLocaleString("pt-BR", {
                maximumFractionDigits: 2,
                minimumFractionDigits: 2
              })+' %';
            },
            targets: [5],
          },
        ],
      });
    } catch (error) {
      console.log(error);
    }
    finally {
      $.LoadingOverlay('hide')
    }
  }


  $("#btnConsultar").on("click", async function () {
    try {
      $.LoadingOverlay("show");
      try {
        await buscaTabelaComissao();

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

    } finally {
      $.LoadingOverlay("hide");
      $("#modal-filtros").modal("hide");
    }
  });
  $("#btnFiltros").trigger('click');
});
