$(document).ready(async function () {
  // inputs

  let queryString = window.location.href;
  let pegaUsuario = queryString.indexOf('usuario/') + 8; // + 6 porque é a soma do "pagar/""
  let usuario = queryString.substr(pegaUsuario, queryString.length);

  if (usuario != 'create') {
    usuario = atob(usuario);
  }

  $('#btnVoltar').on('click', async function () {
    await deletaRegistro('ACESSO_USUARIOS', getCookie('usuario'), usuario);
    window.location.href = `${BASE_URI}/usuario`;
  });

  $('#msform').validate({
    debug: false,
    ignore: "",
    rules: {
      txtNome: { required: true, },
      txtDescontoMax: { required: true, },
      txtTipo: { required: true, },
      txtIDDashWEB: { required: true, }
    },
    messages: {
      txtNome: { required: 'Usuário precisa de um nome', },
      txtDescontoMax: { required: 'Informar desconto máximo do usuário', },
      txtTipo: { required: 'Inserir tipo do usuário', },
      txtIDDashWEB: { required: 'Inserir id DashBoard WEB', }
    },
    errorElement: 'span',
    errorPlacement(error, element) {
      error.addClass('invalid-feedback');
      element.closest('.form-group').append(error);
    },
    highlight(element) {
      $(element).addClass('is-invalid');
    },
    unhighlight(element) {
      $(element).removeClass('is-invalid');
    },
    async submitHandler() {
      try {
        window.event.preventDefault();
        $.LoadingOverlay("show");
        try {
          if ((parseFloat($('#txtValor').val()) <= 0) || ($('#txtValor').val() == "0,00")) {
            msgAlerta('Valor não pode ser 0!');
            return;
          }

          let codigo = await retornaCodigoUsuario();

          const objetoUsuario = {
            CODIGO: codigo,
            NOME: $('#txtNome').val(),
            descontoMaximo: $('#txtDescontoMax').val(),
            TIPO: $('#txtTipo').val(),
            IDDASH: pegaChave('#txtIDDashWEB')
          };

          const response = await requisicao('POST', '/Sisplan/usuario/V1/usuario?', `JSON=${encodeURIComponent(JSON.stringify(objetoUsuario))}`, '', 15000);

          if (!response) {
            return;
          }

          if (response.status != 200) {
            let jsonStr = await response.json();
            msgErro(jsonStr.mensagem);
            return;
          }

          $.LoadingOverlay("hide");
          toastr.success(
            'Cadastro efetuado com sucesso!',
            'Confirmação', {
            toastClass: 'alert',
            iconClasses: {
              error: 'alert-error',
              info: 'alert-info',
              success: 'alert-success',
              warning: 'alert-warning'
            },
            positionClass: "toast-top-center",
            progressBar: true,
            timeOut: 3000,
            fadeOut: 1000,
            onHidden() {
              window.location.href = `${BASE_URI}/usuario`;
            }
          }
          ).css({
            "margin-top": "20%",
            width: "500px",
            "max-width": "500px"
          });
        } catch (error) {
          msgErro('Não foi possível gravar os dados do usuario: ');
        }
      } finally {
        $.LoadingOverlay('hide');
      }
    }
  });

  if (usuario != '' && usuario != 'create') {
    try {
      $.LoadingOverlay('show');
      try {
        let dadosUsuario = await buscaDadosUsuario(usuario);

        $('#txtNome').val(dadosUsuario.NOME);
        $('#txtDescontoMax').val(dadosUsuario.DESC_MAX);
        $('#txtTipo').val(dadosUsuario.TIPO);
        $('#txtIDDashWEB').val(dadosUsuario.ID_DASH_WEB);

      } catch (error) {
        console.error(error);
        msgErro('Erro ao retornar os dados o usuário');
      }
    } finally {
      $.LoadingOverlay('hide');
    }
  }

  async function buscaDadosUsuario(codigo) {
    try {
      const url = '/Sisplan/Funcoes/v1/pesquisa?';
      const response = await requisicao('GET', url, `JSON={ "tabela":"acesso_usuarios", "camposSelect":["CODIGO", "NOME", "TIPO", "DESC_MAX"], "where": ["CODIGO = '${codigo}'"]}`);

      if (!response) {
        return;
      }

      const jsonStr = await response.json();
      if (response.status != 200) {
        msgErro(jsonStr.mensagem);
        return;
      }

      return jsonStr.RESULT[0][0];

    } catch (error) {
      console.error(error);
      msgErro('Erro ao buscar dados do usuário');
    }
  }

  async function retornaCodigoUsuario() {
    try {
      const url = '/Sisplan/Funcoes/v1/pesquisa?';
      // const params = `JSON={ "tabela": "acesso_usuarios", "camposSelect": ["CODIGO", "NOME"], "where": [ NOME = '${}'] }`;
      const response = await requisicao('GET', url, `JSON={ "tabela":"acesso_usuarios", "camposSelect":["CODIGO", "NOME"], "where": ["nome = '${$('#txtNome').val()}'"]}`);

      if (!response) {
        return;
      }

      const jsonStr = await response.json();
      if (response.status === 200) {
        return jsonStr.RESULT[0][0].CODIGO;
      }

      msgErro('Erro ao retornar código do usuário!');

      return '';

    } catch (error) {
      console.error(error);
    }
  }

  $('.collapse').on('shown.bs.collapse', function (e) {
    let clicked = $(document).find(`[href='#${$(e.target).attr('id')}']`);

    clicked
      .parent()
      .find(".fa-angle-right")
      .removeClass("fa-angle-right")
      .addClass("fa-angle-down");
  })
    .on('hidden.bs.collapse', function (e) {
      let clicked = $(document).find(`[href='#${$(e.target).attr('id')}']`);

      clicked
        .parent()
        .find(".fa-angle-down")
        .removeClass("fa-angle-down")
        .addClass("fa-angle-right");
    });
});