$(document).ready(async function () {
  componenteFiltro('solicitacao', true, true, 'NumeroConsulta')
  componenteFiltro('funcionario', true, true, 'SolicitanteConsulta')
  componenteFiltro('tipo', true, true, 'TipoConsulta')
  componenteFiltro('centroCusto', true, true, 'CentroCustoConsulta')
  componenteFiltro('itemSolicitacao', true, true, 'CodigoConsulta')
  componenteFiltro('cor', true, true, 'CorConsulta')
  componenteFiltro('tamanho2', true, true, 'TamanhoConsulta')
  componenteFiltro('usuario3', true, true, 'UsuarioConsulta', ["ATIVO = 'S'", "NOME NOT LIKE '[PERCENTUAL]TODOS[PERCENTUAL]'"])
  componenteFiltro('grupoMA', true, true, 'GrupoMaterialConsulta', ["TIPO = 'M'"])
  componenteFiltro('grupoPA', true, true, 'GrupoProdutoConsulta')
  componenteFiltro('grupoMA', true, true, 'GrupoServicoConsulta', ["TIPO = 'S'"])
  componenteFiltro('subGrupo', true, true, 'SubgrupoMaterialConsulta')

  $('#btnConsultarConsulta').on('click', function () {
    ModalConsultaItensSolicitacaoBloqueados.consultar()
    $('#modalFiltrosConsulta').modal('hide')
  })

  $('#modalConsulta').on('shown.bs.modal', function () {
    PerfilSolicitacoes.preencherFiltrosPerfilCompras('Consulta').then((result) => {
      if (!result) {
        return
      }
      ModalConsultaItensSolicitacaoBloqueados.consultar()
    })
  })

  $('#btnFiltrosModalConsulta').on('click', function () {
    $('#modalFiltrosConsulta').modal('show')
  })

  $('#btnFiltrosConsulta').on('click', function () {
    $('#modalFiltrosConsulta').modal('show')
  })

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

  function limparFiltros() {
    $('#txtNumeroConsulta').empty().trigger('change')
    $('#txtSolicitanteConsulta').empty().trigger('change')
    if (!$('#txtTipoConsulta').prop('disabled')) {
      $('#txtTipoConsulta').empty().trigger('change')
    }
    if (!$('#txtCentroCustoConsulta').prop('disabled')) {
      $('#txtCentroCustoConsulta').empty().trigger('change')
    }
    $('#txtCodigoConsulta').empty().trigger('change')
    $('#txtCorConsulta').empty().trigger('change')
    $('#txtTamanhoConsulta').empty().trigger('change')
    $('#txtUsuarioConsulta').empty().trigger('change')
    if (!$('#txtGrupoMaterialConsulta').prop('disabled')) {
      $('#txtGrupoMaterialConsulta').empty().trigger('change')
    }
    if (!$('#txtGrupoProdutoConsulta').prop('disabled')) {
      $('#txtGrupoProdutoConsulta').empty().trigger('change')
    }
    if (!$('#txtGrupoServicoConsulta').prop('disabled')) {
      $('#txtGrupoServicoConsulta').empty().trigger('change')
    }
    if (!$('#txtSubgrupoMaterialConsulta').prop('disabled')) {
      $('#txtSubgrupoMaterialConsulta').empty().trigger('change')
    }
    $('#txtCadastroDeConsulta').val('1200-01-01')
    $('#txtCadastroAteConsulta').val('2500-12-31')
  }

  $('#tabelaItensConsulta').on('click', '#btnInformacoesItem', async function () {
    const datatableItens = $('#tabelaItensConsulta').DataTable()
    const { codigo, cor, tamanho, tipoItem } = datatableItens?.row($(this)?.parents('tr'))?.data()
    ModalInformacoesItemCentralCompras.carregarModalInformacoesItem(codigo, cor, tamanho, tipoItem)
  })

  $('#tabelaItensConsulta').on('dblclick', 'tr', async function () {
    const { codigo, cor, tamanho, tipoItem } = $('#tabelaItensConsulta').DataTable().row($(this)).data()
    ModalInformacoesItemCentralCompras.carregarModalInformacoesItem(codigo, cor, tamanho, tipoItem)
  })
})

window.ModalConsultaItensSolicitacaoBloqueados = window.ModalConsultaItensSolicitacaoBloqueados || {}

ModalConsultaItensSolicitacaoBloqueados.criarTabelaItens = ({ filtros }) => {
  if ($.fn.DataTable.isDataTable('#tabelaItensConsulta')) {
    $('#tabelaItensConsulta').DataTable().destroy()
    $('#tabelaItensConsulta').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="Informações Item" id="btnInformacoesItem">Informações Item</button>     ' +
        '</div>'
      )
    },
    {
      data: 'dataCadastro',
      title: 'Cadastro',
      render(data) {
        return retornarDataISOEmYMD({ dataISO: data, reverso: true, usarUTC: true })
      },
    },
    {
      data: 'dataEmissao',
      title: 'Emissão',
      render(data) {
        return retornarDataISOEmYMD({ dataISO: data, reverso: true, usarUTC: true })
      },
    },
    {
      data: 'dataEntrega',
      title: 'Entrega',
      render(data) {
        return retornarDataISOEmYMD({ dataISO: data, reverso: true, usarUTC: true })
      },
    },
    {
      data: 'dataBaixa',
      title: 'Baixa',
      render(data) {
        try {
          const date = new Date(data)
          if (date.getFullYear() < 2000) {
            return ''
          }

          return retornarDataISOEmYMD({ dataISO: data, reverso: true, usarUTC: true })
        } catch (_) {
          return ''
        }
      },
    },
    {
      data: 'aprovadorPendente',
      title: 'Aprovador Pendente',
    },
    {
      data: 'solicitante',
      title: 'Solicitante',
    },
    {
      data: 'descricaoSolicitante',
      title: 'Descrição Solicitante',
    },
    {
      data: 'codigo',
      title: 'Código',
    },
    {
      data: 'codigo2',
      title: 'Código 2',
    },
    {
      data: 'descricao',
      title: 'Descrição',
    },
    {
      data: 'cor',
      title: 'Cor',
    },
    {
      data: 'descricaoCor',
      title: 'Descrição Cor',
    },
    {
      data: 'tamanho',
      title: 'Tamanho',
    },
    {
      data: 'descricaoTamanho',
      title: 'Descrição Tamanho',
      visible: false,
    },
    {
      data: 'ordem',
      title: 'Ordem',
    },
    {
      data: 'tipoItem',
      title: 'Tipo Item',
    },
    {
      data: 'observacao',
      title: 'Observação',
    },
    {
      data: 'codigoCliente',
      title: 'Código Cliente',
    },
    {
      data: 'nomeCliente',
      title: 'Nome Cliente',
    },
    {
      data: 'prazo',
      title: 'Prazo',
      visible: false,
    },
    {
      data: 'descricaoPrazo',
      title: 'Descrição Prazo',
      visible: false,
    },
    {
      data: 'colecao',
      title: 'Coleção',
      visible: false,
    },
    {
      data: 'descricaoColecao',
      title: 'Descrição Coleção',
      visible: false,
    },
    {
      data: 'motivo',
      title: 'Motivo',
      visible: false,
    },
    {
      data: 'descricaoMotivo',
      title: 'Descrição Motivo',
      visible: false,
    },
    {
      data: 'tipo',
      title: 'Tipo',
    },
    {
      data: 'descricaoTipo',
      title: 'Descrição Tipo',
    },
    {
      data: 'tabelaPreco',
      title: 'Tabela de Preço',
      visible: false,
    },
    {
      data: 'descricaoTabelaPreco',
      title: 'Descrição Tabela Preço',
      visible: false,
    },
    {
      data: 'centroCusto',
      title: 'Centro de Custo',
    },
    {
      data: 'descricaoCentroCusto',
      title: 'Descrição Centro de Custo',
    },
    {
      data: 'deposito',
      title: 'Depósito',
      visible: false,
    },
    {
      data: 'descricaoDeposito',
      title: 'Descrição Depósito',
      visible: false,
    },
    {
      data: 'ordemCompra',
      title: 'O.C.',
    },
    {
      data: 'fornecedorOrdemCompra',
      title: 'Descrição O.C.',
      visible: false,
    },
    {
      data: 'contaContabil',
      title: 'Conta Contábil',
      visible: false,
    },
    {
      data: 'descricaoContaContabil',
      title: 'Descrição Conta Contábil',
      visible: false,
    },
    {
      data: 'especificacao',
      title: 'Especificação',
    },
    {
      data: 'unidade',
      title: 'Unidade',
    },
    {
      data: 'unidadeCompra',
      title: 'Unidade de Compra',
    },
    {
      data: 'fatorConversao',
      title: 'Fator de Conversão',
      className: 'text-right',
      render: function (data) {
        return retornarFloatFormatadoEmMonetario({ valor: data, quantidadeCasasDecimais: 2 })
      }
    },
    {
      data: 'quantidade',
      title: 'Quantidade',
      className: 'text-right',
      render: function (data) {
        return retornarFloatFormatadoEmMonetario({ valor: data, quantidadeCasasDecimais: 2 })
      }
    },
    {
      data: 'preco',
      title: 'Preço',
      className: 'text-right',
      render: function (data) {
        return retornarFloatFormatadoEmMonetario({ valor: data, quantidadeCasasDecimais: 2 })
      }
    },
    {
      data: 'valor',
      title: 'Valor',
      className: 'text-right',
      render: function (data) {
        return retornarFloatFormatadoEmMonetario({ valor: data, quantidadeCasasDecimais: 2 })
      }
    },
    {
      data: 'efetivadoEm',
      title: 'Efetivado Em',
      render(data) {
        return retornarDataISOEmYMD({ dataISO: data, reverso: true, usarUTC: true, incluirHora: true })
      },
    },
    {
      data: 'status',
      title: 'Situação',
    },
    {
      data: 'usuario',
      title: 'Usuário',
    },
    {
      data: 'codigoUltimoFornecedor',
      title: 'Código Último Fornecedor',
    },
    {
      data: 'nomeUltimoFornecedor',
      title: 'Nome Último Fornecedor',
    },
    {
      data: 'id',
      title: 'Id',
      visible: false,
    },
  ]

  $('#tabelaItensConsulta').DataTable({
    sort: false,
    paging: true,
    destroy: true,
    lengthChange: false,
    filter: false,
    info: false,
    ordering: false,
    sorting: false,
    order: false,
    pageLength: 12,
    colReorder: true,
    serverSide: true,
    ajax: {
      url: `${getCookie('protocolo')}://${getCookie('ip_api')}/sisplan/centralcompras/solicitacao/v1/itensbloqueadosporperfil`,
      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: '55vh',
  })
  UtilsCentralCompras.criarContainerBotoes({
    tabela: 'tabelaItensConsulta',
  })
  UtilsCentralCompras.habilitarEsconderColunasItensSolicitacao({
    tabela: 'tabelaItensConsulta',
    tela: 'modalConsultaItensSolicitacaoBloqueados',
  })
  UtilsCentralCompras.habilitarExportarCsv({
    tabela: 'tabelaItensConsulta',
    status: 'B',
    tipo: 'SOL',
    modalConsulta: true,
    retornarFiltros: ModalConsultaItensSolicitacaoBloqueados.retornarFiltros,
  })
}

ModalConsultaItensSolicitacaoBloqueados.retornarFiltros = async function () {
  const cadastroDe = $('#txtCadastroDeConsulta').val() || '1200-01-01'
  const cadastroAte = $('#txtCadastroAteConsulta').val() || '1200-01-01'
  const numero = await formataListas($('#txtNumeroConsulta').val().toString())
  const solicitante = await formataListas($('#txtSolicitanteConsulta').val().toString())
  const tipo = await formataListas($('#txtTipoConsulta').val().toString(), true)
  const centroCusto = await formataListas($('#txtCentroCustoConsulta').val().toString())
  const codigo = await formataListas($('#txtCodigoConsulta').val().toString())
  const cor = await formataListas($('#txtCorConsulta').val().toString())
  const tamanho = await formataListas($('#txtTamanhoConsulta').val().toString())
  const usuario = await formataListas($($('#txtUsuarioConsulta')?.[0]?.innerHTML)?.toArray().map((it) => pegaDescricao($(it).text())).toString())
  const grupoMaterial = await formataListas($('#txtGrupoMaterialConsulta').val().toString())
  const grupoProduto = await formataListas($('#txtGrupoProdutoConsulta').val().toString())
  const grupoServico = await formataListas($('#txtGrupoServicoConsulta').val().toString())
  const subgrupoMaterial = await formataListas($('#txtSubgrupoMaterialConsulta').val().toString())

  return {
    cadastroDe,
    cadastroAte,
    numero,
    solicitante,
    tipo,
    centroCusto,
    codigo,
    cor,
    tamanho,
    usuario,
    grupoMaterial,
    grupoProduto,
    grupoServico,
    subgrupoMaterial,
  }
}

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