$('#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: "#tutorial-step1",
        popover: {
          title: "Campos",
          description:
            "Aqui se encontram os campos essenciais para consultar e gravar as informações.",
          position: "bottom",
        },
      },
      {
        element: '#btnVoltar',
        popover: {
          title: 'Voltar',
          description: 'Aqui está o botão para voltar à consulta.',
          position: 'bottom'
        }
      },
      {
        element: '#btnGravar',
        popover: {
          title: 'Gravar',
          description: 'Aqui está o botão para gravar as informações.',
          position: 'bottom'
        }
      }
    ])
    driver.start()
  })
})

$(document).ready(async function () {
  componenteFiltro('ordemCompra', true, true, 'Numero')
  componenteFiltro('fornecedor', true, true)
  componenteFiltro('centroCusto', true, true)
  componenteFiltro('tipo', true, true)

  $('#btnConsultar').on('click', function () {
    ComprasAtendidas.consultar()
    $('#modalFiltros').modal('hide')
  })

  $('#tabelaItens').on('click', '#btnItens', async function () {
    const datatableItens = $('#tabelaItens').DataTable()
    const dados = datatableItens?.row($(this)?.parents('tr'))?.data()
    window.location.href = `${BASE_URI}/itens_compra/ID=${dados?.id ?? 0}&STATUS=B`
  })

  $('#tabelaItens').on('click', '#btnImprimir', async function () {
    const datatableItens = $('#tabelaItens').DataTable()
    const dados = datatableItens?.row($(this)?.parents('tr'))?.data()
    imprimir({ numero: dados.numero })
  })

  PerfilCompras.preencherFiltrosPerfilCompras().then((result) => {
    if (!result) {
      return
    }
    ComprasAtendidas.consultar()
  })

  $('#btnFiltros').on('click', function () {
    $('#modalFiltros').modal('show')
  })

  $('#btnLimparFiltros').on('click', function () {
    limparFiltros()
  })

  function limparFiltros() {
    $('#txtNumero').empty().trigger('change')
    $('#txtFornecedor').empty().trigger('change')
    if (!$('#txtTipo').prop('disabled')) {
      $('#txtTipo').empty().trigger('change')
    }
    if (!$('#txtCentroCusto').prop('disabled')) {
      $('#txtCentroCusto').empty().trigger('change')
    }
    $('#txtEmissaoDe').val('1200-01-01')
    $('#txtEmissaoAte').val('2500-12-31')
    $('#txtEntregaDe').val('1200-01-01')
    $('#txtEntregaAte').val('2500-12-31')
  }

  async function imprimir({ numero }) {
    try {
      $.LoadingOverlay('show');
      const bImprimeAutomatico = await verificaImprimirAutomatico('RelOrdemCompra');
      let arquivo = await GeraRelatorio(`/sisplan/impressao/v1/acesso_ordem_compra?&INDIVIDUAL=S&NUMERO='${numero}'`, 'GET', 1000000, false, 'RelOrdemCompra');
      if (arquivo != undefined) {
        if (!bImprimeAutomatico) {
          window.open(`${BASE_URI}/relatorios_api/pdf/${arquivo}`, '_blank');
        }
        await limparRelatorios();
      }

    } catch (error) {
      console.error(error);
      msgErro('Não foi possível realizar a impressão.')
    } finally {
      $.LoadingOverlay('hide');
    }
  }

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

window.ComprasAtendidas = window.ComprasAtendidas || {}

ComprasAtendidas.criarTabelaItens = ({ filtros }) => {
  if ($.fn.DataTable.isDataTable('#tabelaItens')) {
    $('#tabelaItens').DataTable().destroy()
    $('#tabelaItens').empty()
  }

  const columns = [
    {
      data: 'numero',
      title: 'Número',
      render: (data) => (
        '<div style="text-align:start;"> ' +
        '    <button class="btn btn-info btn-sm dropdown-toggle btnVerificaOpcoes" id="tutorialTabela" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> ' +
        '      ' + data + ' ' +
        '    </button> ' +
        '    <div class="dropdown-menu"> ' +
        '    <button class="dropdown-item" type="button" title="Itens" id="btnItens">Itens</button>     ' +
        '    <button class="dropdown-item" type="button" title="Imprimir" id="btnImprimir">Imprimir</button>     ' +
        '</div>'
      )
    },
    {
      data: 'status',
      title: 'Status',
    },
    {
      data: 'usuario',
      title: 'Usuário',
    },
    {
      data: 'dataEmissao',
      title: 'Emissão',
      render: function (data) {
        return retornarDataISOEmYMD({ dataISO: data, usarUTC: true, reverso: true, separadorData: '/' })
      }
    },
    {
      data: 'dataEntrega',
      title: 'Entrega',
      render: function (data) {
        return retornarDataISOEmYMD({ dataISO: data, usarUTC: true, reverso: true, separadorData: '/' })
      }
    },
    {
      data: 'fornecedor',
      title: 'Fornecedor',
    },
    {
      data: 'nomeFornecedor',
      title: 'Nome',
    },
    {
      data: 'colecao',
      title: 'Coleção',
    },
    {
      data: 'descricaoColecao',
      title: 'Desc. Coleção',
    },
    {
      data: 'motivo',
      title: 'Motivo',
    },
    {
      data: 'descricaoMotivo',
      title: 'Desc. Motivo',
    },
    {
      data: 'centroCusto',
      title: 'Centro de Custo',
    },
    {
      data: 'descricaoCentroCusto',
      title: 'Desc. Centro de Custo',
    },
    {
      data: 'tipo',
      title: 'Tipo',
      render: function (data) {
        if (data === 0) {
          return ''
        }

        return data
      }
    },
    {
      data: 'descricaoTipo',
      title: 'Desc. Tipo',
    },
    {
      data: 'nomeUltimoAprovador',
      title: 'Último Aprovador',
    },
    {
      data: 'aprovadoEm',
      title: 'Aprovado Em',
      render: function (data) {
        return retornarDataISOEmYMD({
          dataISO: new Date(data),
          incluirHora: true,
          reverso: true,
          usarUTC: true,
        })
      }
    },
    {
      data: 'observacao',
      title: 'Observação',
    },
    {
      data: 'id',
      title: 'Id',
      visible: false,
    },
  ]

  $('#tabelaItens').DataTable({
    sort: false,
    paging: true,
    destroy: true,
    lengthChange: false,
    filter: false,
    info: false,
    ordering: false,
    sorting: false,
    order: false,
    pageLength: 18,
    colReorder: true,
    serverSide: true,
    ajax: {
      url: `${getCookie('protocolo')}://${getCookie('ip_api')}/sisplan/centralcompras/compra/v1/atendidas`,
      type: "POST",
      headers: {
        'Authorization': getCookie('accessToken') ? 'Bearer ' + getCookie('accessToken') : '',
      },
      data: function (data) {
        const { start, length, draw } = data;
        return JSON.stringify({
          filtros,
          paginacao: {
            quantidadeMaximaRegistros: length,
            quantidadeRegistrosPular: start,
            contadorRequisicoes: draw,
          },
          empresa: getCookie('empresa'),
          idUsuario: getCookie('id_usuario'),
        })
      },
      dataSrc: function (json) {
        if (!json || !json.data) {
          return []
        }
        return json.data
      },
      cache: true,
      beforeSend: function () {
        $.LoadingOverlay('show')
      },
      complete: function () {
        $.LoadingOverlay('hide')
      },
    },
    autoWidth: true,
    columns,
    scrollX: true,
    scrollY: '737px',
  })
  // UtilsCentralCompras.criarContainerBotoes({
  //   tabela: 'tabelaItens',
  // })
  // UtilsCentralCompras.habilitarEsconderColunas({
  //   tabela: 'tabelaItens',
  //   tela: 'itensCompraEnviados',
  // })
  // UtilsCentralCompras.habilitarExportarCsv({
  //   tabela: 'tabelaItens',
  //   status: 'A',
  //   tipo: 'COM',
  // })
}

ComprasAtendidas.retornarFiltros = async function () {
  const emissaoDe = $('#txtEmissaoDe').val() || '1200-01-01'
  const emissaoAte = $('#txtEmissaoAte').val() || '1200-01-01'
  const entregaDe = $('#txtEntregaDe').val() || '1200-01-01'
  const entregaAte = $('#txtEntregaAte').val() || '1200-01-01'
  const numero = await formataListas($('#txtNumero').val().toString())
  const fornecedor = await formataListas($('#txtFornecedor').val().toString())
  const tipo = await formataListas($('#txtTipo').val().toString(), true)
  const centroCusto = await formataListas($('#txtCentroCusto').val().toString())

  return {
    emissaoDe,
    emissaoAte,
    entregaDe,
    entregaAte,
    numero,
    fornecedor,
    tipo,
    centroCusto,
  }
}

ComprasAtendidas.consultar = function () {
  ComprasAtendidas.retornarFiltros()
    .then((filtros) => {
      ComprasAtendidas.criarTabelaItens({ filtros })
    })
}