/**
 * 项目管理 API 服务
 */

import axios from 'axios'

const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || '/api'

// 创建 axios 实例
const apiClient = axios.create({
  baseURL: API_BASE_URL,
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
})

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

// 响应拦截器
apiClient.interceptors.response.use(
  response => {
    return response.data
  },
  error => {
    console.error('API Error:', error)
    return Promise.reject(error)
  }
)

/**
 * 项目管理 API
 */
export const projectApi = {
  /**
   * 获取项目列表
   * @param {Object} params - 查询参数
   * @returns {Promise}
   */
  getProjects(params = {}) {
    return apiClient.get('/projects', { params })
  },

  /**
   * 获取项目详情
   * @param {Number} projectId - 项目ID
   * @returns {Promise}
   */
  getProjectDetail(projectId) {
    return apiClient.get(`/projects/${projectId}`)
  },

  /**
   * 创建项目
   * @param {Object} data - 项目数据
   * @returns {Promise}
   */
  createProject(data) {
    return apiClient.post('/projects', data)
  },

  /**
   * 更新项目
   * @param {Number} projectId - 项目ID
   * @param {Object} data - 项目数据
   * @returns {Promise}
   */
  updateProject(projectId, data) {
    return apiClient.put(`/projects/${projectId}`, data)
  },

  /**
   * 删除项目
   * @param {Number} projectId - 项目ID
   * @returns {Promise}
   */
  deleteProject(projectId) {
    return apiClient.delete(`/projects/${projectId}`)
  },

  /**
   * 更新文件提交信息
   * @param {Number} projectId - 项目ID
   * @param {Object} data - 提交信息
   * @returns {Promise}
   */
  updateSubmission(projectId, data) {
    return apiClient.put(`/projects/${projectId}/submission`, data)
  },

  /**
   * 标记为已提交
   * @param {Number} projectId - 项目ID
   * @param {Object} data - 提交确认信息
   * @returns {Promise}
   */
  markAsSubmitted(projectId, data) {
    return apiClient.post(`/projects/${projectId}/submit`, data)
  },

  /**
   * 更新开标信息
   * @param {Number} projectId - 项目ID
   * @param {Object} data - 开标信息
   * @returns {Promise}
   */
  updateBiddingInfo(projectId, data) {
    return apiClient.put(`/projects/${projectId}/bidding`, data)
  },

  /**
   * 上传开标媒体文件
   * @param {Number} projectId - 项目ID
   * @param {FormData} formData - 文件数据
   * @returns {Promise}
   */
  uploadBiddingMedia(projectId, formData) {
    return apiClient.post(`/projects/${projectId}/bidding/media`, formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
  },

  /**
   * 更新结果公示
   * @param {Number} projectId - 项目ID
   * @param {Object} data - 结果信息
   * @returns {Promise}
   */
  updateResult(projectId, data) {
    return apiClient.put(`/projects/${projectId}/result`, data)
  },

  /**
   * 添加经验总结
   * @param {Number} projectId - 项目ID
   * @param {Object} data - 经验总结
   * @returns {Promise}
   */
  addExperience(projectId, data) {
    return apiClient.post(`/projects/${projectId}/experience`, data)
  },

  /**
   * 归档项目
   * @param {Number} projectId - 项目ID
   * @param {Object} data - 归档信息
   * @returns {Promise}
   */
  archiveProject(projectId, data) {
    return apiClient.post(`/projects/${projectId}/archive`, data)
  },

  /**
   * 导出项目信息
   * @param {Number} projectId - 项目ID
   * @returns {Promise}
   */
  exportProject(projectId) {
    return apiClient.get(`/projects/${projectId}/export`, {
      responseType: 'blob'
    })
  },

  /**
   * 下载文件
   * @param {Number} projectId - 项目ID
   * @param {String} fileType - 文件类型
   * @returns {Promise}
   */
  downloadFile(projectId, fileType) {
    return apiClient.get(`/projects/${projectId}/files/${fileType}`, {
      responseType: 'blob'
    })
  }
}

/**
 * 文件上传辅助函数
 * @param {File} file - 文件对象
 * @param {String} type - 文件类型
 * @returns {FormData}
 */
export function createFileFormData(file, type) {
  const formData = new FormData()
  formData.append('file', file)
  formData.append('type', type)
  return formData
}

/**
 * 下载文件辅助函数
 * @param {Blob} blob - 文件数据
 * @param {String} filename - 文件名
 */
export function downloadBlob(blob, filename) {
  const url = window.URL.createObjectURL(blob)
  const link = document.createElement('a')
  link.href = url
  link.download = filename
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link)
  window.URL.revokeObjectURL(url)
}

export default projectApi
