$('#tutorial').on('click', function () {
  $(document).ready(async function () {
    const driver = new Driver({
      doneBtnText: 'Sair',
      closeBtnText: 'Fechar',
      nextBtnText: 'Próximo',
      prevBtnText: 'Anterior',
      allowClose: false
    });
    driver.defineSteps([

      {
        element: '#btnFiltros',
        popover: {
          title: 'Botão Filtros',
          description: 'Clique aqui para filtrar.',
          position: 'right'
        }
      },
      {
        element: '#btnIncluir',
        popover: {
          title: 'Botão Incluir',
          description: 'Clique aqui para iniciar o cadastro.',
          position: 'right'
        }
      },
      {
        element: '#tabelaSolicitacao',
        popover: {
          title: 'Tabela Solicitações de Coleta',
          description: 'Aqui estão todas as solicitações de coleta cadastradas.',
          position: 'top'
        }
      }
    ]);
    driver.start();
  });
});

$(document).ready(async function () {
  const permissaoUsuarioLogado = await permissaoAcessos("SOLICITACAO_COLETA");

  let colunas = JSON.parse(localStorage.getItem('colunasInvisiveisRelatorios'))

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

  $('#modal-ColunasVisiveis').on('show.bs.modal', function () {
    const cols = [];
    let colunasInvisiveis = JSON.parse(localStorage.getItem('colunasInvisiveisRelatorios'))

    $('#tabelaSolicitacao').DataTable().columns().every(function () {
      cols.push({
        'title': $(this.header()).text().trim(),
        'data': this.dataSrc()
      })
    });

    adicionaColunas(cols, colunasInvisiveis.solicitacaocoleta ?? [], [])
  });

  addPesquisaAutocompleta();
  await consultasolicitacaocoleta();

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

  $('#btnConsultar').on('click', async function () {
    await consultasolicitacaocoleta(true);
    $('#modal-filtros').modal('hide');
  });

  async function consultasolicitacaocoleta() {
    try {
      $.LoadingOverlay("show");

      let filtros = ' ';
      filtros += pegaChave('#txtSolicitacao') != '' ? ` AND SOL_COLETA.ID = ${pegaChave('#txtSolicitacao')}` : '';
      filtros += pegaValor('#rgStatus') != '' ? ` AND SOL_COLETA.STATUS = '${pegaValor('#rgStatus')}'` : '';
      filtros += pegaValor('#txtDtDe') != '' ? ` AND SOL_COLETA.DT_CADASTRO >= '${pegaValor('#txtDtDe')}'` : '';
      filtros += pegaValor('#txtDtAte') != '' ? ` AND SOL_COLETA.DT_CADASTRO <= '${pegaValor('#txtDtAte')}'` : '';
      filtros += pegaValor('#txtColetaDtDe') != '' ? ` AND SOL_COLETA.DT_RETIRADA >= '${pegaValor('#txtColetaDtDe')}'` : '';
      filtros += pegaValor('#txtColetaDtAte') != '' ? ` AND SOL_COLETA.DT_RETIRADA <= '${pegaValor('#txtColetaDtAte')}'` : '';

      const pesquisaParam = {
        tabela: 'SOL_COLETA',
        camposSelect: [
          'SOL_COLETA.ID',
          'SOL_COLETA.CNPJ_RETIRADA',
          'ENTIDADE.NOME',
          'SOL_COLETA.DT_CADASTRO',
          'SOL_COLETA.DT_RETIRADA',
          'SUM(SOL_COLETA_IT.VOLUMES) VOLUMES',
          'SUM(1) QTDE_NOTAS',
          'SUM(SOL_COLETA_IT.PESO) PESO',
          'SOL_COLETA.STATUS'
        ],
        leftJoin: [
          { tabela: 'SOL_COLETA_IT', condicao: 'SOL_COLETA_IT.ID_SOLCOL = SOL_COLETA.ID' },
          { tabela: 'ENTIDADE', condicao: 'ENTIDADE.CNPJ = SOL_COLETA.CNPJ_RETIRADA' },
        ],
        where: [`1=1 ${filtros} AND SOL_COLETA.COD_USUARIO = '${getCookie('cod_usuario')}' AND SOL_COLETA.ID_EMP = ${getCookie('emp_id')}`],
        groupBy: [
          'SOL_COLETA.ID',
          'SOL_COLETA.CNPJ_RETIRADA',
          'ENTIDADE.NOME',
          'SOL_COLETA.DT_CADASTRO',
          'SOL_COLETA.DT_RETIRADA',
          'SOL_COLETA.STATUS'
        ],
      };

      const jsonStr = await retornaJsonPesquisaPadrao(JSON.stringify(pesquisaParam));

      if (jsonStr.length == 0) {
        msgAlerta('Nenhum dado encontrado, favor verificar os filtros.');
        $.LoadingOverlay("hide");
        return;
      }

      const dataSetCols = [];
      const keys = Object.keys(jsonStr[0]);
      for (var k in keys) {
        dataSetCols.push({
          'title': keys[k],
          'data': keys[k]
        });
      };

      $('#tabelaSolicitacao').DataTable({
        search: false,
        filter: true,
        destroy: true,
        scrollX: true,
        scrollY: '55vh',
        pageLength: 25,
        paging: true,
        data: jsonStr,
        columns: dataSetCols,
        order: [[0, 'desc']],
        autoWidth: false,
        colReorder: true,
        columnDefs: [
          {
            render: funcBotaoOpcoes,
            targets: [0]
          },
          {
            render: funcFormataData,
            targets: [3, 4],
          },
          {
            render: funcRetornaFase,
            targets: [8],
          }
        ]
      });

      $('#tabelaSolicitacao_length').prepend('<button class="buttonColVis" id="buttonColVis"><i class="fas fa-cogs"></i></button>');
      $('#tabelaSolicitacao_length').prepend('<button class="buttonExcel" id="buttonExcel"><i class="fas fa-file-excel"></i></button>');

      $('#buttonColVis').prop('title', 'Configurar colunas visíveis');
      $('#buttonExcel').prop('title', 'Exportar');

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

      $("#btnConfirmarColunas").off();
      $("#btnConfirmarColunas").on("click", async function () {
        try {
          $.LoadingOverlay("show");

          const novasColunas = retornaNovasColunasInvisiveis();
          localStorage.setItem(
            "colunasInvisiveisRelatorios",
            JSON.stringify({
              ...colunas,
              solicitacaocoleta: novasColunas,
            })
          );

          $('#tabelaSolicitacao').DataTable().columns().visible(true);

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

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

      $('#buttonExcel').off();
      $('#buttonExcel').on('click', async function () {
        const dados = $("#tabelaSolicitacao").DataTable().data().toArray();
        await exportaCSV("", "", undefined, null, 'Relatório de Solicitações de Coleta', '', '', 999, false, false, dados);
      });


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

  function funcRetornaFase(data, type, row) {
    if (!data) {
      return 'DESCONHECIDO'
    }
    if (data == 'P') {
      return 'Pendente'
    }
    if (data == 'A') {
      return 'Aceito'
    }
    if (data == 'R') {
      return 'Rejeitado'
    }
    return data;
  };

  $('#btnIncluir').on('click', function () {
    if (permissaoUsuarioLogado.INCLUI == 'S') {
      window.location.href = "solicitacaocoleta/create";
    } else {
      msgAlertaSemConfirmacao("Sem permissão para incluir!");
    }
  });

  $('#tabelaSolicitacao').on('click', '#btn-imprimir', async function () {
    $.LoadingOverlay('show');
    try {
      const data = $('#tabelaSolicitacao').DataTable().row($(this).parents('tr')).data();
      const url = `/sisplan/impressao/v1/imprimirsolicitacaocoleta?`;

      const filtros = `ID=${data.ID}`;
      const bImprimeAutomatico = await verificaImprimirAutomatico('RelSolicitacaoColeta');
      let arquivo = await GeraRelatorio(`${url}${filtros}`, 'GET', 150000, false, 'RelSolicitacaoColeta');
      if (arquivo != undefined) {
        if (!bImprimeAutomatico) {
          window.open(`${BASE_URI}/relatorios_api/pdf/${arquivo}`, '_blank');
        }
        await limparRelatorios();
      }

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

  $('#tabelaSolicitacao').on('click', '#btn-editar', async function () {
    if (permissaoUsuarioLogado.ALTERA == 'S') {
      let data = $('#tabelaSolicitacao').DataTable().row($(this).parents('tr')).data();
      if (data.STATUS != 'P') {
        msgAlerta('Apenas é possível editar solicitações pendentes.');
        return;
      }
      window.location.href = `solicitacaocoleta/${data.ID}`;
    } else {
      msgAlertaSemConfirmacao("Sem permissão para alterar!");
    }
  });

  $('#tabelaSolicitacao').on('dblclick', 'tr', async function () {
    if (permissaoUsuarioLogado.ALTERA == 'S') {
      let data = $('#tabelaSolicitacao').DataTable().row($(this)).data();
      if (data.STATUS != 'P') {
        msgAlerta('Apenas é possível editar solicitações pendentes.');
        return;
      }
      window.location.href = `solicitacaocoleta/${data.ID}`;
    } else {
      msgAlertaSemConfirmacao("Sem permissão para alterar!");
    }
  });

  function funcFormataData(data, type, row) {
    if (!data) {
      return 'NÃO ESPECIFICADO'
    }
    x = data.slice(0, 10).split('-');
    return `${x[2]}/${x[1]}/${x[0]}`;
  };

  function funcBotaoOpcoes(data) {
    var retorno = '<div style="text-align:start;"> ' +
      '    <button class="btn btn-info btn-sm dropdown-toggle btnVerificaOpcoes" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> ' +
      '      ' + data + ' ' +
      '    </button> ' +
      '    <div class="dropdown-menu"> ' +
      '    <button class="dropdown-item" type="button" title="Editar" id="btn-editar">Editar</button>     ' +
      '    <button class="dropdown-item" type="button" title="Imprimir" id="btn-imprimir">Imprimir</button>     ' +
      '</div>';
    return retorno;
  };

  function addPesquisaAutocompleta() {
    $('#txtSolicitacao').autocompleta(1, `JSON={ "tabela":"SOL_COLETA", "camposSelect":[ "ID CHAVE", "CNPJ_RETIRADA DESCRICAO"], "where": ["ID_EMP = ${getCookie('emp_id')} AND COD_USUARIO = '${getCookie('cod_usuario')}'"]}`);
    $('#btnConsultaSolicitacao').pesquisa('#txtSolicitacao', 'ID', 'CNPJ_RETIRADA', `/sisplan/funcoes/v1/pesquisa?JSON={"tabela":"SOL_COLETA", "camposSelect":[ "ID", "CNPJ_RETIRADA"], "where": ["ID_EMP = ${getCookie('emp_id')} AND COD_USUARIO = '${getCookie('cod_usuario')}'"]}`, 'Pesquisa Solicitação', 'SOLICITACAO');
    $('#btnLimpaSolicitacao').on('click', function () {
      $('#txtSolicitacao').val('');
    });

    $('#btnLimparFiltros').on('click', function () {
      $('#txtSolicitacao').val('');
      $('#rgStatus').val('').change();
      $('#txtDtDe').val('');
      $('#txtDtAte').val('');
      $('#txtColetaDtDe').val('');
      $('#txtColetaDtAte').val('');
    });
  };
});