import axios from 'axios'

/**
 * AI 端专用 axios 实例
 * 基础地址指向 AI 服务，超时时间较长（大模型响应慢）
 */
const aiService = axios.create({
  baseURL: '/ai-api',
  timeout: 300000, // 5 分钟，大模型处理可能较慢
})

/**
 * 请求拦截器 — 每次请求都带上 Token header
 * 浏览器安全策略不允许 JS 直接设置 Cookie header，改用 Token header 传递
 */
aiService.interceptors.request.use((config) => {

  return config
})

/** AI 端通用响应结构 */
export interface AiResult<T = any> {
  code: number
  msg: string
  data: T
  timestamp: string
  uuid: string
}

/** 上传简历返回数据 */
export interface UploadResumeData {
  /** 简历 ID（字符串，避免大整数精度丢失） */
  resumeId: string
}

/**
 * 自定义 JSON 解析：将超出安全整数范围的数字转为字符串，防止精度丢失
 * 匹配 JSON 中独立的纯数字（不在引号内），超过 15 位的整数加上引号
 */
function safeParseLargeNumbers(data: string) {
  // 将超过 15 位的整数值加上引号，变成字符串
  const processed = data.replace(/:\s*(\d{16,})/g, ':"$1"')
  return JSON.parse(processed)
}

/**
 * 上传简历文件
 * POST /resume/upload
 * @param file 简历文件（pdf / word）
 */
export function uploadResume(file: File) {
  const formData = new FormData()
  formData.append('file', file)

  return aiService.post<AiResult<UploadResumeData>>('/resume/upload', formData, {
    headers: {
      'Content-Type': 'multipart/form-data',
    },
    // 自定义响应解析，防止大整数 ID 精度丢失
    transformResponse: [(data: string) => {
      try {
        return safeParseLargeNumbers(data)
      } catch {
        return data
      }
    }],
  }).then(res => res.data)
}

export default aiService


// ==================== Nova 对话接口 ====================

/** Nova 对话历史消息项 */
export interface NovaChatHistoryItem {
  /** 角色：user-用户 assistant-AI助手 */
  role: 'user' | 'assistant'
  /** 消息内容 */
  content: string
}

/** Nova 对话请求参数 */
export interface NovaChatParams {
  /** 用户输入的消息 */
  message: string
  /** 简历 ID */
  resumeId: number | string
  /** 当前浏览岗位 ID，不传则无岗位上下文 */
  jobId?: number | string
  /** 历史对话，前端维护 */
  history?: NovaChatHistoryItem[]
}

/** Nova 对话返回数据 */
export interface NovaChatResponse {
  /** AI 回复，Markdown 格式 */
  message: string
}

/**
 * Nova AI 对话
 * POST /nova-chat/chat
 * @param params 对话参数
 * @returns 完整响应体 { code, msg, data: { message } }
 */
export function sendNovaChat(params: NovaChatParams) {
  return aiService.post<AiResult<NovaChatResponse>>('/nova-chat/chat', params, {
    headers: {

    },
  }).then(res => res.data)
}
