$('#txtClienteStone').autocompleta(1, `JSON={"tabela":"ENTIDADE", "camposSelect":[ "CODCLI CHAVE", "NOME DESCRICAO"], "where": null}`);
$('#btnClienteStone').pesquisa('#txtClienteStone', 'CODCLI', 'NOME', `/sisplan/funcoes/v1/pesquisa?JSON={ "tabela":"ENTIDADE", "camposSelect":[ "CODCLI", "NOME"]}`, 'Pesquisa Entidade', 'ENTIDADE');
$('#btnLimpaClienteStone').on('click', function () {
  $('#txtClienteStone').val('');
});

$('#txtBancoStone').autocompleta(1, `JSON={"tabela":"CADBAN", "camposSelect":[ "BANCO CHAVE", "NOME_BANCO DESCRICAO"], "where": null}`);
$('#btnBancoStone').pesquisa('#txtBancoStone', 'BANCO', 'NOME_BANCO DESCRICAO', `/sisplan/funcoes/v1/pesquisa?JSON={ "tabela":"CADBAN", "camposSelect":[ "BANCO", "NOME_BANCO"]}`, 'Pesquisa Banco', 'CADBAN');
$('#btnLimpaBancoStone').on('click', function () {
  $('#txtBancoStone').val('');
});

$('#txtContaStone').autocompleta(1, `JSON={"tabela":"CADCONTA", "camposSelect":[ "CONTA CHAVE", "DESCRICAO DESCRICAO"], "where": null}`);
$('#btnContaStone').pesquisa('#txtContaStone', 'CONTA', 'DESCRICAO', `/sisplan/funcoes/v1/pesquisa?JSON={ "tabela":"CADCONTA", "camposSelect":[ "CONTA", "DESCRICAO"]}`, 'Pesquisa Conta Bancária', 'CADCONTA');
$('#btnLimpaContaStone').on('click', function () {
  $('#txtContaStone').val('');
});

$('#txtClasseTaxaStone').autocompleta(1, `JSON={"tabela":"CLASSE_GER", "camposSelect":[ "CODIGO CHAVE", "DESCRICAO DESCRICAO"], "where": null}`);
$('#btnClasseTaxaStone').pesquisa('#txtClienteStone', 'CODIGO', 'DESCRICAO', `/sisplan/funcoes/v1/pesquisa?JSON={ "tabela":"CLASSE_GER", "camposSelect":[ "CODIGO", "DESCRICAO"]}`, 'Pesquisa Classe Gerencial', 'CLASSE_GER');
$('#btnLimpaClasseTaxaStone').on('click', function () {
  $('#txtClasseTaxaStone').val('');
});

$('#txtClasseBaixaStone').autocompleta(1, `JSON={"tabela":"CLASSE_GER", "camposSelect":[ "CODIGO CHAVE", "DESCRICAO DESCRICAO"], "where": null}`);
$('#btnClasseBaixaStone').pesquisa('#txtClienteStone', 'CODIGO', 'DESCRICAO', `/sisplan/funcoes/v1/pesquisa?JSON={ "tabela":"CLASSE_GER", "camposSelect":[ "CODIGO", "DESCRICAO"]}`, 'Pesquisa Classe Gerencial', 'CLASSE_GER');
$('#btnLimpaClasseBaixaStone').on('click', function () {
  $('#txtClasseBaixaStone').val('');
});

$('#txtClasseDespesaStone').autocompleta(1, `JSON={"tabela":"CLASSE_GER", "camposSelect":[ "CODIGO CHAVE", "DESCRICAO DESCRICAO"], "where": null}`);
$('#btnClasseDespesaStone').pesquisa('#txtClienteStone', 'CODIGO', 'DESCRICAO', `/sisplan/funcoes/v1/pesquisa?JSON={ "tabela":"CLASSE_GER", "camposSelect":[ "CODIGO", "DESCRICAO"]}`, 'Pesquisa Classe Gerencial', 'CLASSE_GER');
$('#btnLimpaClasseDespesaStone').on('click', function () {
  $('#txtClasseDespesaStone').val('');
});

$('#txtHistoricoStone').autocompleta(1, `JSON={"tabela":"HISTCP", "camposSelect":[ "HISTORICO CHAVE", "DESCRICAO DESCRICAO"], "where": null}`);
$('#btnHistoricoStone').pesquisa_serverside(['#txtHistoricoStone'], ['HISTORICO'], ['DESCRICAO'], '{"tabela":"HISTCP", "camposSelect":[ "HISTORICO", "DESCRICAO"], "where": null}', 'Pesquisa de Histórico');
$('#btnLimpaHistóricoStone').on('click', function () {
  $('#txtHistoricoStone').val('');
});

$('#btnVerBaixasStone').on('click', async function () {
  if (!$('#txtArquivo').val()) {
    throw msgAlerta('Nenhum arquivo inserido no campo caminho, impossível visualizar as baixas!');
  }
  await verBaixasStone();
});

function converterParaDateTimeDelphi(dataStr) {
  if (!dataStr) return null;

  const [data, hora] = dataStr.split(' ');

  const [dia, mes, ano] = data.split('/');

  const horaFormatada = hora ? hora : '00:00:00';

  return `${ano}-${mes}-${dia} ${horaFormatada}`;
}

async function verBaixasStone() {
  $.LoadingOverlay('show');
  try {
    limpaTabela();
    let params = await coletaDadosInputsStone();

    const jsonLista = JSON.parse($('#conteudoFormatado').val());

    const listaStone = jsonLista.map((item, i) => {
      return {
        nsu: item['ID da Transação'],
        sel: 'N',
        bandeira: '',
        valorPago: item['Entrada'],
        valorBrutoArq: item['Entrada'],  
        valorTarifa: item['Taxa total da operação'],
        dataPagamento: converterParaDateTimeDelphi(item['Data de pagamento']),
        parcela: item['Parcela'],
        valorLiquido: item['Entrada líquida'],
        dataVencimento: converterParaDateTimeDelphi(item['Data de pagamento'])
      }
    });

    const body = {
      Stone: listaStone
    }

    const response = await requisicao('POST', `/sisplan/escretorno/V1/buscabaixasstone?`, `PARAMS=${JSON.stringify(params)}`, JSON.stringify(body), 90000);

    if (!response) {
      return;
    }

    let jsonStr = await response.json();

    dataSetColsStone[0].render = function (data, type, row, meta) {
      let checked = true;
      let bloqueia = false;
      row.SEL = 'S';

      if (row.NUMERO == '') {
        checked = false;
        bloqueia = true;
        row.SEL = 'N';
      } else if (row.SALDO == 0) {
        checked = false;
        bloqueia = true;
        row.SEL = 'N';
      } else if (row.VALORBRUTOARQ != row.VALORDUPLICATA) {
        checked = false;
        row.SEL = 'N';
      }

      let disabledAttribute = bloqueia ? 'disabled' : '';
      return `<div class="icheck-danger d-inline">
                  <input type="checkbox" ${disabledAttribute} ${checked ? 'checked' : ''} id="check_col_${meta.row}_row_${meta.col}" class="campoConsulta">
                  <label for="check_col_${meta.row}_row_${meta.col}"></label>
              </div>`
    }

    $('#tabelaStone').DataTable({
      paging: true,
      filter: false,
      info: false,
      length: false,
      order: false,
      destroy: true,
      data: jsonStr,
      columns: dataSetColsStone,
      columnDefs: [{
        targets: [6, 7, 8],
        render: function (data, type, row) {
          if (type === 'display' || type === 'filter') {
            var date = new Date(data);
            var dia = date.getDate();
            var mes = date.getMonth() + 1;
            var ano = date.getFullYear();
            if (dia < 10) {
              dia = '0' + dia;
            }
            if (mes < 10) {
              mes = '0' + mes;
            }
            return dia + '/' + mes + '/' + ano;
          } else {
            return data;
          }
        },
      }],
     rowCallback: async function (row, data) {
        if (data.NUMERO == '') {
          $(row).css('background-color', '#B4524D');
          $(row).css('color', '#ecfdff');
        }
        else if (data.SALDO == 0) {
          $(row).css('background-color', '#3A5E44');
          $(row).css('color', '#ecfdff');
        }
        else if (data.VALORBRUTOARQ != data.VALORDUPLICATA) {
          $(row).css('background-color', '#04336C');
          $(row).css('color', '#ecfdff');
        }
      },
    });
    $('#checkTodosStone').prop('checked', true);
  } catch (error) {
    console.log(error)
  } finally {
    $.LoadingOverlay('hide');
  }
}

function limpaTabela() {
  if ($.fn.DataTable.isDataTable("#tabelaStone")) {
    $("#tabelaStone").DataTable().destroy();
    $("#tabelaStone").empty();
  }
}

async function validaConfirmacaoStone() {
  if (!($('#txtBancoStone'))) {
    throw msgAlerta('Banco não informado, verifique!');
  }
  if (!($('#txtContaStone'))) {
    throw msgAlerta('Conta não informada, verifique!');
  }
  if (!($('#txtClasseBaixaStone'))) {
    throw msgAlerta('Classe de baixa não informada, verifique!');
  }
  if (!($('#txtClasseTaxaStone'))) {
    throw msgAlerta('Classe de taxa não informada, verifique!');
  }
  if (!($('#txtHistoricoStone').val())) {
    throw msgAlerta('Histórico não informado, verifique!');
  }
}

$('#btnConfirmarStone').on('click', async function () {
  $.LoadingOverlay('show');
  try {
    const Stone = await buscaDadosTabelaStone();
    const params = await coletaDadosInputsStone();

    await validaConfirmacaoStone();

    const body = {
      Stone: Stone
    }

    const response = await requisicao('POST', `/sisplan/escretorno/V1/confirmastone?`, `PARAMS=${JSON.stringify(params)}`, JSON.stringify(body), 90000);

   if (response.status !== 200) {
        msgAlerta('Não foi possível gravar os dados das baixas do extrato de cartão Rede. Por favor, tente novamente.');
        return
      };

      await criaMensagemSucesso('Baixas do arquivo Rede gravadas com sucesso!', () => { window.location.reload() });
  } finally {
      $.LoadingOverlay('hide');
  }
});

$('[name="chkSugestao"]').on('change', function () {
  if ($('#rgPrevisaoStone').is(':checked')) {
    $('#divTabelaStoneResumo').addClass('d-none');
  } else {
    $('#divTabelaStoneResumo').removeClass('d-none');
  }
});

async function buscaDadosTabelaStone() {
  const tabelaStone = $('#tabelaStone').DataTable().rows().data().toArray();

  const objeto = tabelaStone.map((dados) => dados.SEL == 'S' ? ({
    sel: dados.SEL,
    numero: dados.NUMERO,
    codCli: dados.CODCLI,
    nome: dados.NOME,
    fatura: dados.FATURA,
    dataEmissao: dados.DATAEMISSAO,
    dataVencimento: dados.DATAVENCIMENTO,
    dataPagamento: dados.DATAPAGAMENTO,
    nsu: dados.NSU,
    numeroTerminal: dados.NUMEROTERMINAL,
    parcela: dados.PARCELA,
    valorBrutoArq: dados.VALORBRUTOARQ,
    valorDuplicata: dados.VALORDUPLICATA,
    valorPago: dados.VALORPAGO,
    valorTarifa: dados.VALORTARIFA,
    valorLiquido: dados.VALORLIQUIDO,
    difMaior: dados.DIFMAIOR,
    difMenor: dados.DIFMENOR,
    bandeira: dados.BANDEIRA,
    saldo: dados.SALDO,
    banco: dados.BANCO,
    agencia: dados.AGENCIA,
    conta: dados.CONTA,
    modalidade: dados.MODALIDADE,
    tipoRecto: dados.TIPORECTO,
    tipoLancamento: dados.TIPOLANCAMENTO,
    taxa: dados.TAXA,
    taxaRec: dados.TAXAREC,
    naoSeleciona: dados.NAOSELECIONA,
    empId: dados.EMPID
  }) : null).filter((dados) => dados !== null)
  return objeto;
};

function selecionarTodosInputsStone() {
  $(`#tabelaStone`).DataTable().rows().data().$(`.campoConsulta`).toArray().filter((campoSel) => {
    if (!$(campoSel).prop('disabled')) {
      $(campoSel).prop('checked', !campoSel.checked)
      $('#tabelaStone').DataTable().rows(campoSel.closest('tr')).data().toArray()[0].SEL = campoSel.checked ? 'S' : 'N';
    }
  });
}

$('#tabelaStone').on('click', '.campoConsulta', async function () {
  lineIsChecked = $('#tabelaStone').DataTable().rows((this).closest('tr')).data().toArray()[0].SEL == 'N' ? true : false
  newValue = lineIsChecked ? 'S' : 'N'
  $('#tabelaStone').DataTable().rows((this).closest('tr')).data().toArray()[0].SEL = newValue;
});

async function coletaDadosInputsStone() {
  let tipoLancamento = $('#cbPagamentoStone').is(':checked') ? 1 : 0
  let NaoGeraCC = $('#cbNaoGeraCCStone').is(':checked') ? true : false

  objeto = {
    nomeArquivo: $('#txtNomeArquivoStone').val(),
    numeroArquivo: $('#txtNumeroArquivo').val(),
    cliente: pegaChave('#txtClienteStone'),
    dataPagamento: $('#dtPagamentoStone').val(),
    historico: pegaChave('#txtHistoricoStone'),
    conta: pegaChave('#txtContaStone'),
    classeTaxa: pegaChave('#txtClasseTaxaStone'),
    classeBaixa: pegaChave('#txtClasseBaixaStone'),
    classeDespesa: pegaChave('#txtClasseDespesaStone'),
    valorDe: $('#txtValorDeStone').val(),
    valorAte: $('#txtValorAteStone').val(),
    tipoLancamento: tipoLancamento,
    NaoGeraCC: NaoGeraCC,
  }
  return objeto;
}

$('#checkTodosStone').on('click', function () {
  selecionarTodosInputsStone()
}); 