/**
 * 阿里云OSS上传工具类
 * 直接上传到OSS，不经过服务器
 */

// OSS配置（从后端配置中读取，这里先写死，建议通过接口获取）
const OSS_CONFIG = {
  endpoint: 'oss-cn-beijing.aliyuncs.com',
  bucket: 'mingxuejingbang',
  accessKeyId: 'LTAI5tShe4frXAuHPGMnEjjY',
  accessKeySecret: 'onbNqpaAfdcKU1fygjd2dQqJWPgpN2',
  region: 'oss-cn-beijing'
}

/**
 * 生成文件路径
 * @param {File} file 文件对象
 * @returns {string} 文件路径
 */
function generateFilePath(file) {
  const date = new Date()
  const year = date.getFullYear()
  const month = String(date.getMonth() + 1).padStart(2, '0')
  const day = String(date.getDate()).padStart(2, '0')
  const timestamp = Date.now()
  const random = Math.random().toString(36).substring(2, 15)
  const ext = file.name.substring(file.name.lastIndexOf('.'))
  return `dept/logo/${year}/${month}/${day}/${timestamp}_${random}${ext}`
}

/**
 * 使用原生方式上传到OSS（使用FormData和PostObject）
 * 注意：这种方式需要后端提供签名，为了简化，这里使用STS临时凭证方式
 * 或者使用ali-oss SDK
 */
export async function uploadToOSS(file) {
  return new Promise((resolve, reject) => {
    // 生成文件路径
    const filePath = generateFilePath(file)
    
    // 构建OSS上传URL
    const host = `https://${OSS_CONFIG.bucket}.${OSS_CONFIG.endpoint}`
    const url = `${host}/${filePath}`
    
    // 使用FormData上传
    const formData = new FormData()
    formData.append('key', filePath)
    formData.append('file', file)
    formData.append('policy', '') // 需要后端提供policy
    formData.append('OSSAccessKeyId', OSS_CONFIG.accessKeyId)
    formData.append('signature', '') // 需要后端提供签名
    
    // 注意：直接使用AccessKey不安全，建议使用STS临时凭证或后端签名
    // 这里提供一个简化版本，实际应该通过后端接口获取签名
    
    fetch(url, {
      method: 'PUT',
      headers: {
        'Content-Type': file.type
      },
      body: file
    }).then(response => {
      if (response.ok) {
        resolve({
          url: url,
          fileName: filePath,
          code: 200
        })
      } else {
        reject(new Error('上传失败'))
      }
    }).catch(error => {
      reject(error)
    })
  })
}

/**
 * 使用ali-oss SDK上传（推荐方式）
 * 需要先安装: npm install ali-oss
 */
export async function uploadToOSSWithSDK(file) {
  // 动态导入ali-oss（如果已安装）
  try {
    const OSS = (await import('ali-oss')).default
    
    const client = new OSS({
      region: OSS_CONFIG.region,
      accessKeyId: OSS_CONFIG.accessKeyId,
      accessKeySecret: OSS_CONFIG.accessKeySecret,
      bucket: OSS_CONFIG.bucket
    })
    
    const filePath = generateFilePath(file)
    const result = await client.put(filePath, file)
    
    return {
      url: result.url,
      fileName: filePath,
      code: 200
    }
  } catch (error) {
    console.error('OSS SDK未安装或导入失败:', error)
    throw error
  }
}

