import { request, requestAll, type IRequestConfig } from '@neosjs/request';
import { merge } from 'lodash-es';
const controller = new AbortController();

/**
 * useRequest
 * @param url <String>
 * @param config <Object>
 * @returns Promise
 */
export const useRequest = async (url: string | IRequestConfig, params?: any, config?: IRequestConfig) => {
    try {
      if (!navigator.onLine) {
        return Promise.reject(new Error('网络异常，请检查网络'));
      }
      const { VITE_API_URL } = import.meta.env;
      const options = merge(
        {
          baseURL: VITE_API_URL,
          // 这里可以配置一些公共的配置
          cache: false, // 禁止接口缓存
          retry: 2, // 重试两次
          headers: {
            client: 'web',
          },
          withCredentials: true,
          signal: controller.signal,
        },
        config // 接口调用处传来的配置
      );
      options.params = params;
      const { data } = await request(url, options);
      if (data.code === 0 ) {
        return data
      } else {
        return Promise.reject(data || '请求异常');
      }
    } catch (error: any) {
      return Promise.reject({
        code: error.errCode,
        message: error?.errMsg || '',
      });
    }
};

export const useRequestAll = (iterable: Fn[]) => requestAll(iterable);
