$(document).ready(async function () {
  const initTabelas = () => {
    criaDataTablePadrao('#tabelaValoresMetas', false, false, false, false, true, false, false, null, null, []);
    criaDataTablePadrao('#tabelaOpcoesMetas', false, false, false, false, true, false, false, null, null, [], [5, 6]);
    criaDataTablePadrao('#tabelaMetas', false, false, false, false, true, false, false, null, null, [], [4, 5]);

    if ($('#tabelaMetas').DataTable().rows().count() < 6) {
      $('#tabelaMetas').css('min-height', '80px');
    }
  };

  const initFiltros = () => {
    ['empresa', 'vendedor', 'produto', 'material', 'colecao', 'grupo', 'cliente', 'venda', 'ticket_medio', 'produtos_atendimento', 'preco_medio'].forEach(c => componenteFiltro(c, true, true));
  };

  const initMascaras = () => {
    $("#txtValorMeta, #txtPercentual").maskMoney({
      decimal: ".",
      thousands: "",
      precision: 2,
    });
  };

  $('#txtPercentual').on('blur', function () {
    if (+$(this).val() > 100) {
      $(this).val("0.00");
    }
  });

  $('#check_todos').on('change', function () {
    const isChecked = $(this).prop('checked');
    $('.campoSel').prop('checked', isChecked).toggleClass('selecionado', isChecked);
  });



  $('#btnGravarMeta').on('click', async function () {
    try {
      $.LoadingOverlay('show');
      const idMeta = $('#txtIdMeta').val();
      const Meta = new Metas($('#txtSelectTipos').val(), $('#txtDescricaoMeta').val(), `${$('#txtDtInicial').val()}T00:00:00Z`, `${$('#txtDtFinal').val()}T00:00:00Z`, idMeta);

      if (Meta.validar()) Meta.gravar();

      if (idMeta) {
        criaMensagemSucesso(`Meta ${idMeta ? 'editada' : 'gravada'} com sucesso!`, () => {
          window.location.href = `${BASE_URI}/metas`;
        });
        return
      }

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

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

  const registrarGravacaoMeta = (campo) => {
    $('#btnGravarOpcoesMeta').on('click', async function () {
      try {
        $.LoadingOverlay('show');

        const idMeta = $('#txtIdMeta').val();
        const idValor = $('#txtIdValorMetaSelecionado').val();
        if (!parseInt(idMeta)) {
          msgAlerta('Meta não gravada ainda, deseja gravar a meta antes?', () => {
            const idMeta = $('#txtIdMeta').val();
            const Meta = new Metas($('#txtSelectTipos').val(), $('#txtDescricaoMeta').val(), `${$('#txtDtInicial').val()}T00:00:00Z`, `${$('#txtDtFinal').val()}T00:00:00Z`, idMeta);
      
            if (Meta.validar()) Meta.gravar();

          });
          return;
        }
        const tipo = $('#txtSelectTipos').val().toLowerCase();

        if (tipo == campo.toLowerCase()) {
          const id = campo === 'Loja' ? 'Empresa' : campo;

          const metasOpcoes = new OpcoesMetas($('#txtValorMeta').val(), $('#txtOperacaoMeta').val(), $('#txtPercentual').val(), $(`#txt${id}`).val(), idMeta, idValor);
          if (metasOpcoes.idValor) {
            if (metasOpcoes.validar()) await metasOpcoes.editar();
            return;
          }

          if (metasOpcoes.validar()) await metasOpcoes.gravarOpcoes();
        }

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

  ['Loja', 'Vendedor', 'Produto', 'Material', 'Colecao', 'Grupo', 'Cliente'].forEach(registrarGravacaoMeta);

  const registrarGravacaoMetaCustom = (tipoEsperado, idCampo) => {
    $('#btnGravarOpcoesMeta').on('click', async function () {
      try {
        $.LoadingOverlay('show');
        const idMeta = $('#txtIdMeta').val();
        const idValor = $('#txtIdValorMetaSelecionado').val();
        if (!parseInt(idMeta)) {
          msgAlerta('Meta não gravada ainda, deseja gravar a meta antes?');
          return;
        }
        const tipo = $('#txtSelectTipos').val();
        if (tipo === tipoEsperado) {
          const metasOpcoes = new OpcoesMetas(
            $('#txtValorMeta').val(),
            $('#txtOperacaoMeta').val(),
            $('#txtPercentual').val(),
            $(`#txt${idCampo}`).val(),
            idMeta,
            idValor
          );
          if (metasOpcoes.idValor) {
            if (metasOpcoes.validar()) await metasOpcoes.editar();
            return;
          }
          if (metasOpcoes.validar()) await metasOpcoes.gravarOpcoes();
        }
      } catch (e) {
        console.error(e);
      } finally {
        $.LoadingOverlay('hide');
      }
    });
  };
  registrarGravacaoMetaCustom('VENDAS', 'EmpresaVenda');
  registrarGravacaoMetaCustom('TICKET_MEDIO', 'EmpresaTICKET_MEDIO');
  registrarGravacaoMetaCustom('PRODUTOS_ATENDIMENTO', 'EmpresaPRODUTOS_ATENDIMENTO');
  registrarGravacaoMetaCustom('PRECO_MEDIO', 'EmpresaPRECO_MEDIO');

  $('#txtDtInicial, #txtDtFinal').on('blur', function () {
    const dataInicial = $('#txtDtInicial').val();
    const dataFinal = $('#txtDtFinal').val();
    if (!dataInicial || !dataFinal) return;

    const meta = new Metas($('#txtSelectTipos').val(), $('#txtDescricaoMeta').val(), $('#txtDtInicial').val(), $('#txtDtFinal').val(), $('#txtIdMeta').val());
    meta.carregaDias();
  });

  $('#cbTodos').on('change', async function () {
    if (!$(this).is(':checked')) {
      $('#txtVendedor').empty().trigger('change');
      return;
    }

    const pesquisaParam = {
      tabela: 'REPRESEN',
      camposSelect: ['CODREP', 'NOME'],
      where: []
    };

    const jsonStr = await retornaJsonPesquisaPadrao(JSON.stringify(pesquisaParam));
    await insereValorPesquisaVarios('txtVendedor', 'CODREP', 'NOME', jsonStr);
    $('#txtVendedor').trigger('change');
    $('.txtVendedor').trigger('click');
  });

  $('#btnExplodir').on('click', () => $('#modalDiasMeta').modal('show'));
  $('#btnVincularDias').on('click', () => $('#modalVincularDiasMeta').modal('show'));
  $('#btnConfirmarDias').on('click', () => $('#modalDiasMeta').modal('hide'));

  $('#modalVincularDiasMeta, #modalDiasMeta, #modalDiasValor').on('shown.bs.modal', function () {
    $(this).find("table").DataTable().columns.adjust().draw(false);
  });

  $('#btnExplodir').on('click', () => {
    $("#tabelaDiasMeta").DataTable().rows().data().each((item, index) => {
      $($('.campoSel')[index]).prop('checked', item.DIA_UTIL === 'S');
    });
  });

  $('#btnSelecionarEmpresas').on('click', async () => await carregaEmpresasDisponiveis());
  await carregaEmpresasDisponiveis(false, false);
  $('.empresa_selecionada').prop('checked', false);

  $('#txtSelectTipos').on('change', function () {
    const tipo = $(this).val();
    const campos = ['#txtOperacaoMeta', '#txtValorMeta', '#txtPercentual', '#btnSelecionarEmpresas', '#btnGravarOpcoes', '#btnExplodir'];

    campos.forEach(id => $(id).prop('disabled', tipo === ''));
  });

  initTabelas();
  initFiltros();
  initMascaras();

  await new Metas().carregaValoresMeta();

  $('#txtEmpresaVenda').pesquisa_variosServerside(1, '{ "tabela":"EMPRESA", "camposSelect":["EMP_ID", "EMP_NOME"],  "where": null}', "EMP_ID", "EMP_NOME");
  $("#btnEmpresaVenda").pesquisa_serversideSel("#txtEmpresaVenda", `{"tabela":"EMPRESA", "camposSelect":[ "EMP_ID", "EMP_PAT", "EMP_NOME" ], "where": null}`, "Pesquisa de Empresa");
  $('#btnLimpaEmpresaVenda').on('click', function () {
    $('#txtEmpresaVenda').empty().trigger('change');
  });

  $('#txtEmpresaTICKET_MEDIO').pesquisa_variosServerside(1, '{ "tabela":"EMPRESA", "camposSelect":["EMP_ID", "EMP_PAT", "EMP_NOME"],  "where": null}', "EMP_ID", "EMP_PAT", "EMP_NOME");
  $("#btnEmpresaTICKET_MEDIO").pesquisa_serversideSel("#txtEmpresaTICKET_MEDIO", `{"tabela":"EMPRESA", "camposSelect":[ "EMP_ID", "EMP_PAT", "EMP_NOME" ], "where": null}`, "Pesquisa de Empresa");
  $('#btnLimpaEmpresaTICKET_MEDIO').on('click', function () {
    $('#txtEmpresaTICKET_MEDIO').empty().trigger('change');
  });

  $('#txtEmpresaPRODUTOS_ATENDIMENTO').pesquisa_variosServerside(1, '{ "tabela":"EMPRESA", "camposSelect":["EMP_ID", "EMP_PAT", "EMP_NOME"],  "where": null}', "EMP_ID", "EMP_PAT", "EMP_NOME");
  $("#btnEmpresaPRODUTOS_ATENDIMENTO").pesquisa_serversideSel("#txtEmpresaPRODUTOS_ATENDIMENTO", `{"tabela":"EMPRESA", "camposSelect":[ "EMP_ID", "EMP_PAT", "EMP_NOME" ], "where": null}`, "Pesquisa de Empresa");
  $('#btnLimpaEmpresaPRODUTOS_ATENDIMENTO').on('click', function () {
    $('#txtEmpresaPRODUTOS_ATENDIMENTO').empty().trigger('change');
  });

  $('#txtEmpresaPRECO_MEDIO').pesquisa_variosServerside(1, '{ "tabela":"EMPRESA", "camposSelect":["EMP_ID", "EMP_PAT", "EMP_NOME"],  "where": null}', "EMP_ID", "EMP_PAT", "EMP_NOME");
  $("#btnEmpresaPRECO_MEDIO").pesquisa_serversideSel("#txtEmpresaPRECO_MEDIO", `{"tabela":"EMPRESA", "camposSelect":[ "EMP_ID", "EMP_PAT", "EMP_NOME" ], "where": null}`, "Pesquisa de Empresa");
  $('#btnLimpaEmpresaPRECO_MEDIO').on('click', function () {
    $('#txtEmpresaPRECO_MEDIO').empty().trigger('change');
  });

});
