/**
 * 文件处理工具函数
 * 用于统一处理文件URL的构建、查看、下载等操作
 */

/**
 * 规范化文件URL
 * 处理端口丢失、相对路径等问题，返回完整的可访问URL
 * 
 * @param {string} url - 文件URL（可能是完整URL或相对路径）
 * @returns {string} 规范化后的完整URL
 */
export function normalizeFileUrl(url) {
  if (!url) {
    return ''
  }

  // 如果已经是完整的URL（以http://或https://开头）
  if (url.startsWith('http://') || url.startsWith('https://')) {
    try {
      const urlObj = new URL(url)
      
      // 如果hostname是localhost或127.0.0.1且没有端口号，从当前窗口获取端口
      if ((urlObj.hostname === 'localhost' || urlObj.hostname === '127.0.0.1') && !urlObj.port) {
        const currentPort = window.location.port
        if (currentPort) {
          urlObj.port = currentPort
          return urlObj.toString()
        }
      }
      
      return url
    } catch (e) {
      // URL解析失败，返回原URL
      console.warn('URL解析失败:', e, url)
      return url
    }
  } else {
    // 如果是相对路径，拼接基础API地址
    // 确保url以/开头
    const normalizedPath = url.startsWith('/') ? url : '/' + url
    return process.env.VUE_APP_BASE_API + normalizedPath
  }
}

/**
 * 在新窗口中打开文件
 * 
 * @param {string} url - 文件URL
 * @param {string} target - 打开方式，默认为'_blank'
 */
export function openFile(url, target = '_blank') {
  if (!url) {
    console.error('文件URL不能为空')
    return
  }
  
  const fullUrl = normalizeFileUrl(url)
  window.open(fullUrl, target)
}

/**
 * 下载文件
 * 
 * @param {string} url - 文件URL
 * @param {string} filename - 下载的文件名（可选）
 */
export function downloadFile(url, filename) {
  if (!url) {
    console.error('文件URL不能为空')
    return
  }
  
  const fullUrl = normalizeFileUrl(url)
  
  // 创建临时链接进行下载
  const link = document.createElement('a')
  link.href = fullUrl
  link.target = '_blank'
  if (filename) {
    link.download = filename
  }
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link)
}

/**
 * 获取文件预览URL
 * 对于图片等可以直接预览的文件，返回预览URL
 * 对于其他文件，返回下载URL
 * 
 * @param {string} url - 文件URL
 * @returns {string} 预览URL
 */
export function getFilePreviewUrl(url) {
  return normalizeFileUrl(url)
}

/**
 * 判断文件是否为图片
 * 
 * @param {string} url - 文件URL
 * @returns {boolean} 是否为图片
 */
export function isImageFile(url) {
  if (!url) return false
  
  const imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp', '.svg']
  const lowerUrl = url.toLowerCase()
  return imageExtensions.some(ext => lowerUrl.endsWith(ext))
}

/**
 * 判断文件是否为PDF
 * 
 * @param {string} url - 文件URL
 * @returns {boolean} 是否为PDF
 */
export function isPdfFile(url) {
  if (!url) return false
  return url.toLowerCase().endsWith('.pdf')
}

/**
 * 获取文件扩展名
 * 
 * @param {string} url - 文件URL
 * @returns {string} 文件扩展名（不含点号）
 */
export function getFileExtension(url) {
  if (!url) return ''
  
  const lastDot = url.lastIndexOf('.')
  if (lastDot === -1) return ''
  
  return url.substring(lastDot + 1).toLowerCase()
}