text: import getFieldsParamsWithNoValidations from '../fieldsControl/getFieldsParamsWithNoValidations';
  import addFieldsValues from '../fieldsControl/addFieldsValues';
  import cleanSpecificFields from '../fieldsControl/cleanSpecificFields';
  
  /**
   * TODO: Add JSDocs
   *
   */
  
  const apiValidations = (
    baseApi,
    token,
    params,
    field,
    action,
    _id,
    setModalData,
    setSnackBarStatus,
    currentFilledFields = null,
    form,
    ) => {
  
    /**
     * -----
     *
     */
  
    const dados = getFieldsParamsWithNoValidations(_id);
  
    /**
     * -----
     *
     */
  
    const dontValidate = (action === 'exact_blur' || action === 'exists_blur') && dados[field.id].value === '';
  
    if(dontValidate) {
  
      /**
       * -----
       *
       */
  
      if(currentFilledFields) {
        cleanSpecificFields(currentFilledFields, dados);
      }
  
      dados[field.id].ref.setAttribute('errortext', field.error_text);
  
      return;
  
    }
  
    /**
     * -----
     *
     */
  
    const method = 'POST';
  
    const headers = new Headers({
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}`
    });
  
    /**
     * -----
     *
     */
    const filteredDados = {};
  
    Object.keys(dados).forEach(id => {
      filteredDados[id] = dados[id].value;
    })
  
    const body = JSON.stringify({
      evento: {
        id_usuario: params.id_usuario,
        token: token,
        identificador: params.identificador,
        cliente_id: params.cliente_id,
        empresa: params.empresa,
        estabelecimento: params.estabelecimento,
        conexao: params.conexao,
        sistema: params.sistema,
        formulario: params.formulario,
        location: params.location,
        action: action,
        campo: {
          nome: field.id,
          valor: dados[field.id].value,
          formulario: form,
        },
        dados: filteredDados,
      }
    });
  
    /**
     * -----
     *
     */
  
    fetch(`${baseApi}/form-validations`, { method, headers, body })
      .then(res => res.json())
      .then(data => {
  
        /**
         * -----
         *
         */
  
        if(setSnackBarStatus && data.evento.mensagem) {
          setSnackBarStatus({
            show: true,
            text: data.evento.mensagem,
            type: 'success',
          });
        }
  
        /**
         * -----
         *
         */
  
        if(action === 'exists_blur' && data.evento.exist) {
          dados[field.id].ref.setAttribute('error', 'true');
          dados[field.id].ref.setAttribute('data-valle-error', 'true');
  
          if(data.evento.mensagem) {
            dados[field.id].ref.setAttribute('errortext', data.evento.mensagem);
          }
  
        }
  
        if(action === 'exists_blur' && !data.evento.exist) {
          dados[field.id].ref.removeAttribute('error');
          dados[field.id].ref.removeAttribute('data-valle-error');
          dados[field.id].ref.removeAttribute('errortext');
        }
  
        /**
         * -----
         *
         */
  
        if((action === 'exact_blur') && data.evento.exist) {
          addFieldsValues(data.evento.dados, _id);
        } else if (action === 'exact_blur') {
          addFieldsValues(data.evento.dados, _id);
        }
  
        /**
         * -----
         *
         */
  
        if((action === 'exact_blur' || action === 'find') && data.evento.list) {
          data.evento.dados = filteredDados;
          setModalData(data);
        }
  
      }).catch(() => {
  
        /**
         * -----
         *
         */
  
        if(setSnackBarStatus) {
          setSnackBarStatus({
            show: true,
            text: 'Erro interno no servidor',
            type: 'error',
          });
        }
  
      });
  
  }
  
  export default apiValidations;
  