import axios from 'axios'
import type { AxiosResponse } from 'axios'

/**
 * 自定义 JSON 解析：将超过安全整数范围的数字转为字符串，避免精度丢失
 * 原理：用正则把 JSON 中超长数字（≥16位）加上引号变成字符串再交给 JSON.parse
 */
function parseBigIntJson(text: string): any {
  // 匹配 JSON 中独立的长数字（非字符串内的），将 ≥16 位整数用引号包裹
  const processed = text.replace(/:\s*(\d{16,})/g, ':"$1"')
  return JSON.parse(processed)
}

/**
 * 见识星球专用 axios 实例
 * 开发环境：走 Vite proxy（/jianshi-api → https://api.jianshixingqiu.com）解决跨域
 * 生产环境：直接请求 https://api.jianshixingqiu.com
 * 接口完全公开，不需要 token 和登录鉴权
 */
const jianshiRequest = axios.create({
  baseURL: import.meta.env.VITE_JIANSHI_BASE_URL as string,
  timeout: 15000,
  // 见识星球接口固定请求头
  headers: {
    Authorization: 'Bearer f69b5086-97b0-4e5e-b172-453e444d448c',
    'TENANT-ID': '1',
    'CLIENT-TOC': 'Y',
    'Content-Type': 'application/json',
  },
  // 自定义响应数据转换：防止大数 id 精度丢失
  transformResponse: [(data: string) => {
    if (!data) return data
    try {
      return parseBigIntJson(data)
    } catch {
      return data
    }
  }],
})

/**
 * 响应拦截器
 */
jianshiRequest.interceptors.response.use(
  (response: AxiosResponse) => {
    return response.data
  },
  (error) => {
    console.error('[见识星球接口错误]', error)
    return Promise.reject(error)
  },
)

export default jianshiRequest
