import axios from 'axios'

const api = axios.create({
  baseURL: '/api/v1',
  timeout: 30000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
api.interceptors.request.use(
  config => {
    // 可以在这里添加 token
    // const token = localStorage.getItem('token')
    // if (token) {
    //   config.headers.Authorization = `Bearer ${token}`
    // }
    return config
  },
  error => Promise.reject(error)
)

// 响应拦截器
api.interceptors.response.use(
  response => {
    const { data } = response
    if (data.code === 200) {
      return data.data
    }
    return Promise.reject(new Error(data.msg || '请求失败'))
  },
  error => {
    console.error('API Error:', error)
    return Promise.reject(error)
  }
)

// ==================== 模板 API ====================

export const templateApi = {
  // 获取模板列表
  list(page = 1, size = 20) {
    return api.get('/templates', { params: { page, size } })
  },

  // 获取首页统计数据
  getStats() {
    return api.get('/templates/stats')
  },

  // 搜索模板
  search(keyword) {
    return api.get('/templates/search', { params: { keyword } })
  },

  // 获取可访问的模板
  listAccessible() {
    return api.get('/templates/accessible')
  },

  // 获取模板详情
  getById(id) {
    return api.get(`/templates/${id}`)
  },

  // 创建模板
  create(data) {
    return api.post('/templates', data)
  },

  // 更新模板
  update(id, data) {
    return api.put(`/templates/${id}`, data)
  },

  // 删除模板
  delete(id) {
    return api.delete(`/templates/${id}`)
  },

  // 发布模板
  publish(id) {
    return api.post(`/templates/${id}/publish`)
  },

  // 归档模板
  archive(id) {
    return api.post(`/templates/${id}/archive`)
  },

  // 复制模板
  duplicate(id, newName) {
    return api.post(`/templates/${id}/duplicate`, null, { params: { newName } })
  }
}

// ==================== 来源文件 API ====================

export const sourceFileApi = {
  // 获取模板的来源文件列表
  list(templateId) {
    return api.get(`/templates/${templateId}/source-files`)
  },

  // 添加来源文件定义
  add(templateId, data) {
    return api.post(`/templates/${templateId}/source-files`, data)
  },

  // 更新来源文件定义
  update(id, data) {
    return api.put(`/templates/source-files/${id}`, data)
  },

  // 删除来源文件定义
  delete(id, force = false) {
    return api.delete(`/templates/source-files/${id}`, { params: { force } })
  }
}

// ==================== 变量 API ====================

export const variableApi = {
  // 获取模板的变量列表
  list(templateId, params = {}) {
    return api.get(`/templates/${templateId}/variables`, { params })
  },

  // 获取变量按类别分组
  listGrouped(templateId) {
    return api.get(`/templates/${templateId}/variables/grouped`)
  },

  // 添加变量
  add(templateId, data) {
    return api.post(`/templates/${templateId}/variables`, data)
  },

  // 获取变量详情
  getById(id) {
    return api.get(`/templates/variables/${id}`)
  },

  // 更新变量
  update(id, data) {
    return api.put(`/templates/variables/${id}`, data)
  },

  // 删除变量
  delete(id, force = false) {
    return api.delete(`/templates/variables/${id}`, { params: { force } })
  },

  // 预览提取结果
  preview(id, documentId) {
    return api.post(`/templates/variables/${id}/preview`, null, { params: { documentId } })
  },

  // 重排序变量
  reorder(templateId, orderedIds) {
    return api.post(`/templates/${templateId}/variables/reorder`, { orderedIds })
  }
}

// ==================== 生成任务 API ====================

export const generationApi = {
  // 获取生成任务列表
  list(params = {}) {
    return api.get('/generations', { params })
  },

  // 获取生成任务详情
  getById(id) {
    return api.get(`/generations/${id}`)
  },

  // 创建生成任务
  create(data) {
    return api.post('/generations', data)
  },

  // 执行变量提取
  execute(id) {
    return api.post(`/generations/${id}/execute`)
  },

  // 获取执行进度
  getProgress(id) {
    return api.get(`/generations/${id}/progress`)
  },

  // 修改变量值
  updateVariableValue(id, variableName, data) {
    return api.put(`/generations/${id}/variables/${variableName}`, data)
  },

  // 确认并生成文档
  confirm(id) {
    return api.post(`/generations/${id}/confirm`)
  },

  // 下载生成文档
  getDownloadUrl(id) {
    return `/api/v1/generations/${id}/download`
  }
}

// ==================== 认证 API ====================
// 注意：认证接口不在 /api/v1 下，使用独立的 axios 实例

const authInstance = axios.create({
  baseURL: '/auth',
  timeout: 30000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 认证 API 响应拦截器
authInstance.interceptors.response.use(
  response => {
    const { data } = response
    if (data.code === 200) {
      return data.data
    }
    return Promise.reject(new Error(data.msg || '请求失败'))
  },
  error => {
    console.error('Auth API Error:', error)
    return Promise.reject(error)
  }
)

export const authApi = {
  // 用户登录
  login(data) {
    return authInstance.post('/login', data)
  },

  // 用户注册
  register(data) {
    return authInstance.post('/register', data)
  },

  // 用户登出
  logout() {
    const token = localStorage.getItem('accessToken')
    return authInstance.post('/logout', null, {
      headers: { Authorization: `Bearer ${token}` }
    })
  },

  // 刷新 Token
  refreshToken(refreshToken) {
    return authInstance.post('/refresh', { refreshToken })
  },

  // 获取当前用户信息
  getCurrentUser() {
    const token = localStorage.getItem('accessToken')
    return authInstance.get('/me', {
      headers: { Authorization: `Bearer ${token}` }
    })
  },

  // 更新用户资料
  updateProfile(data) {
    const token = localStorage.getItem('accessToken')
    return authInstance.put('/profile', data, {
      headers: { Authorization: `Bearer ${token}` }
    })
  },

  // 修改密码
  changePassword(data) {
    const token = localStorage.getItem('accessToken')
    return authInstance.put('/password', data, {
      headers: { Authorization: `Bearer ${token}` }
    })
  }
}

// ==================== 任务中心 API ====================

export const taskCenterApi = {
  // 获取任务列表
  list(params = {}) {
    return api.get('/tasks/list', { params })
  },

  // 获取任务详情
  getById(taskId) {
    return api.get(`/tasks/${taskId}/detail`)
  },

  // 根据文档ID获取任务详情
  getByDocumentId(documentId) {
    return api.get(`/tasks/by-document/${documentId}`)
  },

  // 获取任务统计
  getStatistics() {
    return api.get('/tasks/statistics')
  },

  // 删除任务
  delete(taskId) {
    return api.delete(`/tasks/${taskId}`)
  }
}

// ==================== 解析 API ====================

export const parseApi = {
  // 启动文档解析
  startParse(documentId) {
    return api.post(`/parse/start/${documentId}`)
  },

  // 获取解析状态
  getStatus(documentId) {
    return api.get(`/parse/status/${documentId}`)
  }
}

export default api
