/**
 * 通用 API 接口
 */

import request from '@/common/utils/request'

export const commonApi = {
  /**
   * 文件上传
   * @param {File} file 文件对象
   * @param {Object} options 上传选项
   */
  uploadFile(file, options = {}) {
    const formData = new FormData()
    formData.append('file', file)
    
    // 添加额外参数
    Object.keys(options).forEach(key => {
      formData.append(key, options[key])
    })
    
    return request.post('/common/upload', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      },
      timeout: 60000 // 60秒超时
    })
  },

  /**
   * 批量文件上传
   * @param {FileList} files 文件列表
   * @param {Object} options 上传选项
   */
  uploadMultipleFiles(files, options = {}) {
    const formData = new FormData()
    
    // 添加多个文件
    Array.from(files).forEach((file, index) => {
      formData.append(`files[${index}]`, file)
    })
    
    // 添加额外参数
    Object.keys(options).forEach(key => {
      formData.append(key, options[key])
    })
    
    return request.post('/common/upload/multiple', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      },
      timeout: 120000 // 2分钟超时
    })
  },

  /**
   * 获取文件信息
   * @param {string} fileId 文件ID
   */
  getFileInfo(fileId) {
    return request.get(`/common/files/${fileId}`)
  },

  /**
   * 删除文件
   * @param {string} fileId 文件ID
   */
  deleteFile(fileId) {
    return request.delete(`/common/files/${fileId}`)
  },

  /**
   * 获取省市区数据
   * @param {number} parentId 父级ID，不传则获取省份
   */
  getRegions(parentId) {
    const params = parentId ? { parentId } : {}
    return request.get('/common/regions', { params })
  },

  /**
   * 获取完整地区树
   */
  getRegionTree() {
    return request.get('/common/regions/tree')
  },

  /**
   * 获取字典数据
   * @param {string} type 字典类型
   */
  getDictData(type) {
    return request.get(`/common/dict/${type}`)
  },

  /**
   * 获取多个字典数据
   * @param {Array} types 字典类型数组
   */
  getMultipleDictData(types) {
    return request.post('/common/dict/multiple', { types })
  },

  /**
   * 获取系统配置
   * @param {string} key 配置键名
   */
  getSystemConfig(key) {
    return request.get(`/common/config/${key}`)
  },

  /**
   * 获取多个系统配置
   * @param {Array} keys 配置键名数组
   */
  getMultipleSystemConfig(keys) {
    return request.post('/common/config/multiple', { keys })
  },

  /**
   * 发送短信验证码
   * @param {Object} data 发送数据
   * @param {string} data.phone 手机号
   * @param {string} data.type 验证码类型
   * @param {string} data.template 短信模板
   */
  sendSmsCode(data) {
    return request.post('/common/sms/send-code', data)
  },

  /**
   * 验证短信验证码
   * @param {Object} data 验证数据
   * @param {string} data.phone 手机号
   * @param {string} data.code 验证码
   * @param {string} data.type 验证码类型
   */
  verifySmsCode(data) {
    return request.post('/common/sms/verify-code', data)
  },

  /**
   * 发送邮件
   * @param {Object} emailData 邮件数据
   * @param {string} emailData.to 收件人
   * @param {string} emailData.subject 主题
   * @param {string} emailData.content 内容
   * @param {string} emailData.template 邮件模板
   */
  sendEmail(emailData) {
    return request.post('/common/email/send', emailData)
  },

  /**
   * 发送邮箱验证码
   * @param {Object} data 发送数据
   * @param {string} data.email 邮箱
   * @param {string} data.type 验证码类型
   */
  sendEmailCode(data) {
    return request.post('/common/email/send-code', data)
  },

  /**
   * 验证邮箱验证码
   * @param {Object} data 验证数据
   * @param {string} data.email 邮箱
   * @param {string} data.code 验证码
   * @param {string} data.type 验证码类型
   */
  verifyEmailCode(data) {
    return request.post('/common/email/verify-code', data)
  },

  /**
   * 获取二维码
   * @param {Object} qrData 二维码数据
   * @param {string} qrData.content 二维码内容
   * @param {number} qrData.size 二维码大小
   * @param {string} qrData.format 图片格式
   */
  generateQRCode(qrData) {
    return request.post('/common/qrcode/generate', qrData)
  },

  /**
   * 解析二维码
   * @param {File} file 二维码图片文件
   */
  parseQRCode(file) {
    const formData = new FormData()
    formData.append('file', file)
    
    return request.post('/common/qrcode/parse', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
  },

  /**
   * 获取天气信息
   * @param {Object} params 查询参数
   * @param {string} params.city 城市名称
   * @param {number} params.days 预报天数
   */
  getWeatherInfo(params) {
    return request.get('/common/weather', { params })
  },

  /**
   * 获取IP信息
   * @param {string} ip IP地址，不传则获取当前IP信息
   */
  getIpInfo(ip) {
    const params = ip ? { ip } : {}
    return request.get('/common/ip-info', { params })
  },

  /**
   * 获取系统时间
   */
  getSystemTime() {
    return request.get('/common/system-time')
  },

  /**
   * 获取系统信息
   */
  getSystemInfo() {
    return request.get('/common/system-info')
  },

  /**
   * 健康检查
   */
  healthCheck() {
    return request.get('/common/health')
  },

  /**
   * 获取版本信息
   */
  getVersionInfo() {
    return request.get('/common/version')
  },

  /**
   * 意见反馈
   * @param {Object} feedbackData 反馈数据
   * @param {string} feedbackData.type 反馈类型
   * @param {string} feedbackData.content 反馈内容
   * @param {string} feedbackData.contact 联系方式
   */
  submitFeedback(feedbackData) {
    return request.post('/common/feedback', feedbackData)
  },

  /**
   * 获取反馈列表
   * @param {Object} params 查询参数
   */
  getFeedbackList(params) {
    return request.get('/common/feedback', { params })
  },

  /**
   * 处理反馈
   * @param {number} id 反馈ID
   * @param {Object} handleData 处理数据
   */
  handleFeedback(id, handleData) {
    return request.post(`/common/feedback/${id}/handle`, handleData)
  },

  /**
   * 获取公告列表
   * @param {Object} params 查询参数
   */
  getAnnouncementList(params) {
    return request.get('/common/announcements', { params })
  },

  /**
   * 获取公告详情
   * @param {number} id 公告ID
   */
  getAnnouncementDetail(id) {
    return request.get(`/common/announcements/${id}`)
  },

  /**
   * 标记公告已读
   * @param {number} id 公告ID
   */
  markAnnouncementRead(id) {
    return request.post(`/common/announcements/${id}/read`)
  },

  /**
   * 获取常见问题
   * @param {Object} params 查询参数
   */
  getFaqList(params) {
    return request.get('/common/faq', { params })
  },

  /**
   * 获取帮助文档
   * @param {Object} params 查询参数
   */
  getHelpDocuments(params) {
    return request.get('/common/help', { params })
  },

  /**
   * 搜索帮助文档
   * @param {string} keyword 搜索关键词
   */
  searchHelpDocuments(keyword) {
    return request.get('/common/help/search', { params: { keyword } })
  },

  /**
   * 获取联系方式
   */
  getContactInfo() {
    return request.get('/common/contact')
  },

  /**
   * 获取关于我们信息
   */
  getAboutInfo() {
    return request.get('/common/about')
  },

  /**
   * 获取隐私政策
   */
  getPrivacyPolicy() {
    return request.get('/common/privacy-policy')
  },

  /**
   * 获取用户协议
   */
  getUserAgreement() {
    return request.get('/common/user-agreement')
  },

  /**
   * 数据统计上报
   * @param {Object} statsData 统计数据
   */
  reportStats(statsData) {
    return request.post('/common/stats/report', statsData)
  },

  /**
   * 错误日志上报
   * @param {Object} errorData 错误数据
   */
  reportError(errorData) {
    return request.post('/common/error/report', errorData)
  },

  /**
   * 性能数据上报
   * @param {Object} performanceData 性能数据
   */
  reportPerformance(performanceData) {
    return request.post('/common/performance/report', performanceData)
  },

  /**
   * 获取热门搜索关键词
   * @param {string} type 搜索类型
   */
  getHotSearchKeywords(type) {
    return request.get('/common/hot-search', { params: { type } })
  },

  /**
   * 搜索建议
   * @param {Object} params 搜索参数
   * @param {string} params.keyword 关键词
   * @param {string} params.type 搜索类型
   */
  getSearchSuggestions(params) {
    return request.get('/common/search-suggestions', { params })
  },

  /**
   * 获取轮播图
   * @param {string} position 位置标识
   */
  getBannerList(position) {
    return request.get('/common/banners', { params: { position } })
  },

  /**
   * 获取广告列表
   * @param {string} position 位置标识
   */
  getAdList(position) {
    return request.get('/common/ads', { params: { position } })
  },

  /**
   * 广告点击统计
   * @param {number} adId 广告ID
   */
  clickAd(adId) {
    return request.post(`/common/ads/${adId}/click`)
  },

  /**
   * 获取推送消息列表
   * @param {Object} params 查询参数
   */
  getPushMessageList(params) {
    return request.get('/common/push-messages', { params })
  },

  /**
   * 标记推送消息已读
   * @param {number} id 消息ID
   */
  markPushMessageRead(id) {
    return request.post(`/common/push-messages/${id}/read`)
  },

  /**
   * 批量标记推送消息已读
   * @param {Array} ids 消息ID数组
   */
  batchMarkPushMessageRead(ids) {
    return request.post('/common/push-messages/batch-read', { ids })
  },

  /**
   * 删除推送消息
   * @param {number} id 消息ID
   */
  deletePushMessage(id) {
    return request.delete(`/common/push-messages/${id}`)
  },

  /**
   * 清空推送消息
   */
  clearPushMessages() {
    return request.delete('/common/push-messages/clear')
  }
}