import axios, { isAxiosError } from 'axios';

// 创建 axios 适配器
export const axiosFetch = async (url: RequestInfo | URL, init?: RequestInit) => {
    const requestHeaders:Record<string, string> = {};
    
    if(init?.headers instanceof Headers) {
      init.headers.forEach((value, key) => {
        requestHeaders[key] = value;
      })
    }
  
    const response = await axios.request({  
      url: url.toString(),  
      method: init?.method || 'GET',  
      headers: requestHeaders,  
      data: init?.body,  
    }).catch((error) => {
      console.log('axiosFetch error', error)
      
      if(isAxiosError(error)) {
        return {
          status: error.response?.status,
          statusText: error.response?.statusText,
          data: error.response?.data,
          headers: error.response?.headers
        }
      }
      throw error;
    }) 
  
    const responseHeaders = new Headers();
    if (response.headers) {
      for (const [key, value] of Object.entries(response.headers)) {
        responseHeaders.set(key, value);
      }
    }
      
    
    // 处理204 No Content响应，不设置body
    const body = response.status === 204
      ? null
      : responseHeaders.get('content-type')?.includes('application/json')
        ? JSON.stringify(response.data)
        : response.data;
    
    return new Response(
      body,
      {
        status: response.status,
        statusText: response.statusText,
        headers: responseHeaders
      }
    )
  }  