import { getLocale } from 'umi';
import { notification } from 'antd';
import gadmin from '@/gadmin';

async function defaultRequest(data: Record<string, any>, showError = true) {
  const response = await window.fetch('/graphql', {
    method: 'POST',
    body: JSON.stringify(data),
    credentials: 'same-origin',
    headers: {
      'Content-Type': 'application/json',
      Accept: 'application/json',
      'Accept-Language': getLocale(),
    },
  });
  if (!response.ok) {
    const errorMessage = response.statusText || 'Network error';
    if (showError) {
      notification.error({
        message: `Request Error(HTTP: ${response.status})`,
        description: errorMessage,
      });
    }
    throw new Error(errorMessage);
  }
  const json: any = await response.json();
  if (json.errors) {
    const errorCode = json.errors[0].extensions?.exception?.code;
    const errorMessage = json.errors[0].message;
    if (errorCode === 401) {
      gadmin.login?.();
    }
    if (showError) {
      notification.error({
        message: 'Request Error',
        description: errorMessage,
      });
    }
    throw new Error(errorMessage);
  }
  return json.data;
}

export default gadmin.request || defaultRequest;
